{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Modeling and Simulation in Python\n",
    "\n",
    "Chapter 12\n",
    "\n",
    "Copyright 2017 Allen Downey\n",
    "\n",
    "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Configure Jupyter so figures appear in the notebook\n",
    "%matplotlib inline\n",
    "\n",
    "# Configure Jupyter to display the assigned value after an assignment\n",
    "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
    "\n",
    "# import functions from the modsim.py module\n",
    "from modsim import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Code\n",
    "\n",
    "Here's the code from the previous notebook that we'll need."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def make_system(beta, gamma):\n",
    "    \"\"\"Make a system object for the SIR model.\n",
    "    \n",
    "    beta: contact rate in days\n",
    "    gamma: recovery rate in days\n",
    "    \n",
    "    returns: System object\n",
    "    \"\"\"\n",
    "    init = State(S=89, I=1, R=0)\n",
    "    init /= sum(init)\n",
    "\n",
    "    t0 = 0\n",
    "    t_end = 7 * 14\n",
    "\n",
    "    return System(init=init, t0=t0, t_end=t_end,\n",
    "                  beta=beta, gamma=gamma)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def update_func(state, t, system):\n",
    "    \"\"\"Update the SIR model.\n",
    "    \n",
    "    state: State with variables S, I, R\n",
    "    t: time step\n",
    "    system: System with beta and gamma\n",
    "    \n",
    "    returns: State object\n",
    "    \"\"\"\n",
    "    s, i, r = state\n",
    "\n",
    "    infected = system.beta * i * s    \n",
    "    recovered = system.gamma * i\n",
    "    \n",
    "    s -= infected\n",
    "    i += infected - recovered\n",
    "    r += recovered\n",
    "    \n",
    "    return State(S=s, I=i, R=r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_simulation(system, update_func):\n",
    "    \"\"\"Runs a simulation of the system.\n",
    "        \n",
    "    system: System object\n",
    "    update_func: function that updates state\n",
    "    \n",
    "    returns: TimeFrame\n",
    "    \"\"\"\n",
    "    frame = TimeFrame(columns=system.init.index)\n",
    "    frame.row[system.t0] = system.init\n",
    "    \n",
    "    for t in linrange(system.t0, system.t_end):\n",
    "        frame.row[t+1] = update_func(frame.row[t], t, system)\n",
    "    \n",
    "    return frame"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Metrics"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Given the results, we can compute metrics that quantify whatever we are interested in, like the total number of sick students, for example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calc_total_infected(results):\n",
    "    \"\"\"Fraction of population infected during the simulation.\n",
    "    \n",
    "    results: DataFrame with columns S, I, R\n",
    "    \n",
    "    returns: fraction of population\n",
    "    \"\"\"\n",
    "    return get_first_value(results.S) - get_last_value(results.S)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's an example.|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.333 0.25 0.46716293183605073\n"
     ]
    }
   ],
   "source": [
    "beta = 0.333\n",
    "gamma = 0.25\n",
    "system = make_system(beta, gamma)\n",
    "\n",
    "results = run_simulation(system, update_func)\n",
    "print(beta, gamma, calc_total_infected(results))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Exercise:** Write functions that take a `TimeFrame` object as a parameter and compute the other metrics mentioned in the book:\n",
    "\n",
    "1.  The fraction of students who are sick at the peak of the outbreak.\n",
    "\n",
    "2.  The day the outbreak peaks.\n",
    "\n",
    "3.  The fraction of students who are sick at the end of the semester.\n",
    "\n",
    "Note: Not all of these functions require the `System` object, but when you write a set of related functons, it is often convenient if they all take the same parameters.\n",
    "\n",
    "Hint:  If you have a `TimeSeries` called `I`, you can compute the largest value of the series like this:\n",
    "\n",
    "    I.max()\n",
    "\n",
    "And the index of the largest value like this:\n",
    "\n",
    "    I.idxmax()\n",
    "\n",
    "You can read about these functions in the `Series` [documentation](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.html)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.043536202687592354"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "def fraction_sick_at_peak(results):\n",
    "    return results.I.max()\n",
    "\n",
    "fraction_sick_at_peak(results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "30"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "def time_of_peak(results):\n",
    "    return results.I.idxmax()\n",
    "\n",
    "time_of_peak(results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0006741943156034474"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "def sick_at_end(results):\n",
    "    return get_last_value(results.I)\n",
    "\n",
    "sick_at_end(results)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### What if?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can use this model to evaluate \"what if\" scenarios.  For example, this function models the effect of immunization by moving some fraction of the population from S to R before the simulation starts."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_immunization(system, fraction):\n",
    "    \"\"\"Immunize a fraction of the population.\n",
    "    \n",
    "    Moves the given fraction from S to R.\n",
    "    \n",
    "    system: System object\n",
    "    fraction: number from 0 to 1\n",
    "    \"\"\"\n",
    "    system.init.S -= fraction\n",
    "    system.init.R += fraction"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's start again with the system we used in the previous sections."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>init</th>\n",
       "      <td>S    0.988889\n",
       "I    0.011111\n",
       "R    0.000000\n",
       "dtyp...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t0</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t_end</th>\n",
       "      <td>98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>beta</th>\n",
       "      <td>0.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>gamma</th>\n",
       "      <td>0.25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "init     S    0.988889\n",
       "I    0.011111\n",
       "R    0.000000\n",
       "dtyp...\n",
       "t0                                                       0\n",
       "t_end                                                   98\n",
       "beta                                              0.333333\n",
       "gamma                                                 0.25\n",
       "dtype: object"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tc = 3      # time between contacts in days \n",
    "tr = 4      # recovery time in days\n",
    "\n",
    "beta = 1 / tc      # contact rate in per day\n",
    "gamma = 1 / tr     # recovery rate in per day\n",
    "\n",
    "system = make_system(beta, gamma)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And run the model without immunization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.468320811028781"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = run_simulation(system, update_func)\n",
    "calc_total_infected(results)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now with 10% immunization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.30650802853979753"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "system2 = make_system(beta, gamma)\n",
    "add_immunization(system2, 0.1)\n",
    "results2 = run_simulation(system2, update_func)\n",
    "calc_total_infected(results2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "10% immunization leads to a drop in infections of 16 percentage points.\n",
    "\n",
    "Here's what the time series looks like for S, with and without immunization."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure to file figs/chap12-fig01.pdf\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(results.S, '-', label='No immunization')\n",
    "plot(results2.S, '--', label='10% immunization')\n",
    "\n",
    "decorate(xlabel='Time (days)',\n",
    "         ylabel='Fraction susceptible')\n",
    "\n",
    "savefig('figs/chap12-fig01.pdf')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can sweep through a range of values for the fraction of the population who are immunized."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0 0.468320811028781\n",
      "0.1 0.30650802853979753\n",
      "0.2 0.16136545700638427\n",
      "0.30000000000000004 0.0728155898425179\n",
      "0.4 0.03552021675299155\n",
      "0.5 0.019688715782459176\n",
      "0.6000000000000001 0.011622057998337987\n",
      "0.7000000000000001 0.006838737800619332\n",
      "0.8 0.003696496253713877\n",
      "0.9 0.0014815326722661948\n",
      "1.0 -0.00016121210941239666\n"
     ]
    }
   ],
   "source": [
    "immunize_array = linspace(0, 1, 11)\n",
    "for fraction in immunize_array:\n",
    "    system = make_system(beta, gamma)\n",
    "    add_immunization(system, fraction)\n",
    "    results = run_simulation(system, update_func)\n",
    "    print(fraction, calc_total_infected(results))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This function does the same thing and stores the results in a `Sweep` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sweep_immunity(immunize_array):\n",
    "    \"\"\"Sweeps a range of values for immunity.\n",
    "    \n",
    "    immunize_array: array of fraction immunized\n",
    "    \n",
    "    returns: Sweep object\n",
    "    \"\"\"\n",
    "    sweep = SweepSeries()\n",
    "    \n",
    "    for fraction in immunize_array:\n",
    "        system = make_system(beta, gamma)\n",
    "        add_immunization(system, fraction)\n",
    "        results = run_simulation(system, update_func)\n",
    "        sweep[fraction] = calc_total_infected(results)\n",
    "        \n",
    "    return sweep"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's how we run it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0.00</th>\n",
       "      <td>0.468321</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.05</th>\n",
       "      <td>0.387288</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.10</th>\n",
       "      <td>0.306508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.15</th>\n",
       "      <td>0.229234</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.20</th>\n",
       "      <td>0.161365</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.25</th>\n",
       "      <td>0.108791</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.30</th>\n",
       "      <td>0.072816</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.35</th>\n",
       "      <td>0.049938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.40</th>\n",
       "      <td>0.035520</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.45</th>\n",
       "      <td>0.026121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.50</th>\n",
       "      <td>0.019689</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.55</th>\n",
       "      <td>0.015072</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.60</th>\n",
       "      <td>0.011622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.65</th>\n",
       "      <td>0.008956</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.70</th>\n",
       "      <td>0.006839</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.75</th>\n",
       "      <td>0.005119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.80</th>\n",
       "      <td>0.003696</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.85</th>\n",
       "      <td>0.002500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.90</th>\n",
       "      <td>0.001482</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0.95</th>\n",
       "      <td>0.000603</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1.00</th>\n",
       "      <td>-0.000161</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "0.00    0.468321\n",
       "0.05    0.387288\n",
       "0.10    0.306508\n",
       "0.15    0.229234\n",
       "0.20    0.161365\n",
       "0.25    0.108791\n",
       "0.30    0.072816\n",
       "0.35    0.049938\n",
       "0.40    0.035520\n",
       "0.45    0.026121\n",
       "0.50    0.019689\n",
       "0.55    0.015072\n",
       "0.60    0.011622\n",
       "0.65    0.008956\n",
       "0.70    0.006839\n",
       "0.75    0.005119\n",
       "0.80    0.003696\n",
       "0.85    0.002500\n",
       "0.90    0.001482\n",
       "0.95    0.000603\n",
       "1.00   -0.000161\n",
       "dtype: float64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "immunize_array = linspace(0, 1, 21)\n",
    "infected_sweep = sweep_immunity(immunize_array)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And here's what the results look like."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure to file figs/chap12-fig02.pdf\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(infected_sweep)\n",
    "\n",
    "decorate(xlabel='Fraction immunized',\n",
    "         ylabel='Total fraction infected',\n",
    "         title='Fraction infected vs. immunization rate',\n",
    "         legend=False)\n",
    "\n",
    "savefig('figs/chap12-fig02.pdf')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If 40% of the population is immunized, less than 4% of the population gets sick."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Logistic function"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To model the effect of a hand-washing campaign, I'll use a [generalized logistic function](https://en.wikipedia.org/wiki/Generalised_logistic_function) (GLF), which is a convenient function for modeling curves that have a generally sigmoid shape.  The parameters of the GLF correspond to various features of the curve in a way that makes it easy to find a function that has the shape you want, based on data or background information about the scenario."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def logistic(x, A=0, B=1, C=1, M=0, K=1, Q=1, nu=1):\n",
    "    \"\"\"Computes the generalize logistic function.\n",
    "    \n",
    "    A: controls the lower bound\n",
    "    B: controls the steepness of the transition \n",
    "    C: not all that useful, AFAIK\n",
    "    M: controls the location of the transition\n",
    "    K: controls the upper bound\n",
    "    Q: shift the transition left or right\n",
    "    nu: affects the symmetry of the transition\n",
    "    \n",
    "    returns: float or array\n",
    "    \"\"\"\n",
    "    exponent = -B * (x - M)\n",
    "    denom = C + Q * exp(exponent)\n",
    "    return A + (K-A) / denom ** (1/nu)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following array represents the range of possible spending."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([   0.,   60.,  120.,  180.,  240.,  300.,  360.,  420.,  480.,\n",
       "        540.,  600.,  660.,  720.,  780.,  840.,  900.,  960., 1020.,\n",
       "       1080., 1140., 1200.])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spending = linspace(0, 1200, 21)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`compute_factor` computes the reduction in `beta` for a given level of campaign spending.\n",
    "\n",
    "`M` is chosen so the transition happens around \\$500.\n",
    "\n",
    "`K` is the maximum reduction in `beta`, 20%.\n",
    "\n",
    "`B` is chosen by trial and error to yield a curve that seems feasible."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def compute_factor(spending):\n",
    "    \"\"\"Reduction factor as a function of spending.\n",
    "    \n",
    "    spending: dollars from 0 to 1200\n",
    "    \n",
    "    returns: fractional reduction in beta\n",
    "    \"\"\"\n",
    "    return logistic(spending, M=500, K=0.2, B=0.01)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's what it looks like."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd5hU1fnA8e82lt6RDirlpXdUoiBqojFq7Bg1RGKJGmM0RhO7QY36s0Zjb7FGjBV77NgVDL28FKX3ssDC9p3fH+cMXIbZ5S47s7Pl/TzPPrtz78y975mdue895557TlokEsEYY4ypbtJTHYAxxhgTjyUoY4wx1ZIlKGOMMdWSJShjjDHVkiUoY4wx1ZIlKGOMMdVSZqoDMBUjIouBrmWs/ruqXisi6cCTwBhgnap2FZFbgD8AEWBfVd1UiRgOBTar6rS9fP0pwL1AC+BUVX07Zn0EOE5V39rbGCsYTz9gJrCfqi6uin3GiWEccKeqti5j/WjgE6CJquZWYWh7pSL/QxFpB7wCDAVeVtVfV2K/WcB5qvqgf/w34FhVHba320yk2PhM+awGVTNdDbSP83ObXz8COAs4GThYRDoCVwF/BgZWJjl5nwKdKvH6W4H3gN7Ax5WMpa74Cvc/3pbqQEJqD3wQ8rnnAPsBg4DLKrnfM4AbA4/vBI6q5DYTKTY+Uw6rQdVMW1V1dTnrm/vf76lqRET6+scfpqqGEKM58IWqLkl1IDWFqhYC5f3Pq5U9fD5jNQcWqOq8BOw6LSaOXKA61TjT9vwUE5VmI0nULL6J705Vvb+M9eOAfwUWTQIODTx+WlXHiciBwN24ZpVlwGN+u6V+O4cBtwADgVXAbar6WEwT49OqOi5ODD1wZ66jgFLgVeAyVd3qm36ilqjqvnFeHwHGA78ABgALgYtUdVJg+3f57TcAFgBXq+obgffoHuBE4AD/+mtU9U2/vg3wCHCkL9s9wAPEaeITkdeB1ap6gX98BXA70FFVV/ommw3ACcBnPu4zgY7ARmCCL3uJiHTw+x2Fa2r9wJdrbbSJD1cLvgxoBrwDnKuqm2Ob+Px79FvgYlxNdCZwqap+7ePsAjwKjARWAncAj6hq3AOkiLT35ToKqI+r4V6iqqsC/5My9xdnezua+ETkU9zncKB/z5cBd6jq4yLyFK62H3WYqn4qIpf7fbUCpgGXq+o3ftsZuFaE84CWwGRc83Ub/x7t2BYwmkATn4gM8+UcjktczwDXqmqRf49f9u//jbgm6M/8/2BNnDKOA/4IzAF+6bd7G2V8BnD/i13i82X9DXAtrlViHnBdbLN3XWVNfLXPi8BY/3d73BdntH98AHCJiOwD/Bd3EOqP+5JdBPwFQER6+XWf45pdrgXuF5Gf4b7Y+H1cErtzEWkJfAEU4b6QJwGH4K6JRWPaCFwa2FY8FwJ/8/H9APxbRNJEJA14E9gKHOTjmwn8S0TqBV5/I/AwMAyXwILrXwLa+bguBP5aThzvAocHHh+GSy6H+Mcj/O/PgStw78tZQA//+CJc8gJ4CCjx5T4U2BeXaKNa+eU/wyXnw4Ery4ntZuA6H0MhLiEhIpm45FYKHIg7ON5U1kZ8kv0I6BLYb0fgdf9+l7u/kP6KS8iDgQ+Bh/y1p0tw78vXuM/GVyJyvl/+e//8d4CPRWQ/v63rcZ/ZS/36ZcDbfhuX4j5f7XHNosFy9sQlyjm4/8F5uP/XLYGnNQcuwDWPn4B7/64tp1yDcZ/FIbhkV95n4KvY+ETkKOA+X6b+uBOYl0VkBMaa+Gqou0TktjjL+6jqUhHJgZ3NLCKywa9f58/GxwOTVTV60FogIlfhvii34a4JzFbVv/j180Wkhd/mOhEByFHVzXFiOAN34jNWVfP8/scB34hIT1Wd78+uN6vqunLK+H+q+o5//e24BNAGd9b7OPCkqm706+8EfgW0xR2sAF5Q1Ql+/XhgOrCvP/s+FOinqrP9+r8CL5QRx7vAwyLSCdfEdgjwFi75/gdX4/jAn4HPBsZFa3rAYl/j6oPrBLAvMBVYrKqFInI60CSwrwjwW1Vd7+N6DVfrKMv9gffoDmCiiGT78vXAnaGvA2aJyA24RBDPUUB34KequtJv7zTgR+Cn7LyWFHd/qlpQToxRn6rqA/61V+GSzwBVfV9EtgOFgc/r1cCVgVrELb52c5F/Py8EblbVV/3zL8KdzDQBNgORwLaCMfwOd7JzsapGgHki8ifgWd+ZAiADV+P93r/+OdyJUHnGB/ZX5mdAVV8Rkdj4rsbVJif45y8SkaG468Wn7GG/tZ4lqJrpVuC5OMtXhnx9X2C0iATb5tOBBiLSCndAnRJ8QQV6HfUFpkWTkzcZd8bdB5gfcjuLAn/n+N8NfHPYQ8AZvrmmJ+7sFdzBJSq4ny3+d5aPoSCanLzvygrCJ/w5uFrFfFxz3gvsrHUdBTzon/uGiBzmE2pPXPPkvoG4rsPVcE8SkY9wTZ/BxLg5mpwC5e5WVmxllDHT73dxzAlA3KY4ry+uuXXH50dVl/um0r7sTFBl7S9MgtrxWlXd4hNHVuyTRKQxrib3mIg8EliV7ffTGneiMjmwva24A3psQorVF/jGJ6eoL3wcPeLFiivnbnEGbA9ebwvxGYgX04E+aUdlEf57UqtZgqqZ1qvqwkq8PhN3Rh+v6WIzLpns7cXJvDKWp1GxJuWSeNsQkUbAt34/rwFv4GpVn8Y8t7CMGAAQkbTAgSrec4OizXwdcE1Ek4DnRKQ7ronxXb/Nv+Gapp7Evb9/xV1/AHYcvDoDxwNH45ogx+Kuy5RZ5nLiKquMRVTsvQ77Pyv3Pd2DsK+NHsjPwtU2g/IC29mbz2e8ckZjKK+c5ZVxl23u6TMQRyauh+2bMcuLynlNnWHXoOqmuUAvVV0Y/cFd+L4ed91iPjtrJQCIyGMictfum4q77YEi0iCwbBjurDARvbRG4852R6rqLb4ZqK1fF+ZgOQN3Nj4osGxIGc+Nehc4AjgYmORrGj/grnNNj3YkwF1r+LOq/llVnwUW4zqUpPnrZ3fgOlc8oaqn4Dpx/MxfE0ykWUAX3xkkqrzrfXOBrr6jBAC+Q0dXEvM/C803G6/GvU/Bz+cfgKP8+rUE/mci0kBE1viOP+UlrrnAQTHX1X6CSwaL4r+kwsr8DPj1sfHNBbrGlHUMcHqC4qnRrAZVMzXxF5hjFUavy+zBA8AfReQ+/3dn3MXZiapaKiIP4jpT3AQ8jTu4jcVdQAdXY+knIl/F2d/zuKasaLt+C1wT2IeqOqdCpYxvA1APOM33DhsC/MOvy97Ti1VVReQd4Al/MT4b1/uqPJ/jLp4fyc6OIZ/irtX9PSa2Y0TkM6Ap7rpICyDbd/fvg+ts8kfchfXTcQewYLNeInyMO/D9S0SuxHV4KO/emw9x1+gmiEj0PqS7cScqHyY4tjBuB64XkVW4prwzcAkq2hv1HuA63wQ5H7gGV/OfiusJ19i/1z/EbPcBXOeKf4rI/bh7r+7C9UbdvIfmwbDK/Az49bkx8d0OvCAi83BNqYfjegGOxVgNqoa6Bdc9Ovbn1TAvVtXluGsnw3AHpmdx10Yu9euXAMcBxwCzcV+yc1U1elPtnbja1hNxtr0d+DnuyznZx/QFrjdfpfmuxtfgOnPM8XFcDmzCdZkP43T/2o9x14Du28M+C/1z16pq9KA3CXdW/E7gqeNwB72ZwOu45PNEIK5zcLWDD3E1uc7AMdGu/Ynimy5PwnXBnwL8E9exJG5Tpn/+CcA6XOL9CHc98whf9qp2L+4zdjvu/zQGOEVVv/Tr78C9r4/jklJ73PtYiIt9qv85JrhRX/P9Oe6kZrp//TO4Wk+ijKP8z8Au8anqa7ju9Jf5sl4B/D7QaaJOs/ugjKllfJPhARoYZkhETsX1jNw/dZEZUzHWxGdM7RPB3UtzDe5CfUdcLdjOyk2NYk18xtQyvnv5KbjrGHNx92u9CdyQyriMqShr4jPGGFMt1fgmPn/n/HBcJ4F495EYY4ypvjJwHV0mx45KEjpBiUhXXG+XnrihRo7C9dot7w71qjAc1w3YGGNMzTUS1+N3h1AJyt8A9xHwJe5GyQa4Gx0fFZGTo6NEp8gqgOeff5527eLdGmSMMaa6Wr16NWeeeSb4Y3lQ2BrUHbjBGW8Tka0AqnqpiKzHjZKcygRVAtCuXTs6darMHHrGGGNSaLdLNGF78Q3GTVEQ63lck58xxhiTUGET1AZ2He03ajiw20RexhhjTGWFTVD3A4/4+WvSgEF+PLEHcWO4GWOMMQkV6hqUqt7prz3dCjTETYu8Gndd6h/lvjjAz8h6G642thY3UdcjfqbT+3E3F5YAd6vqrRUqiTHGmFolVA1KRLoAj6nqvrhZK5uragfcqMChBuj08+C8gps2ujluwM5b/ZTH4wHBTc42HDhLRH5TwbIYY4ypRcL24vsRaIebMnxbYHkX3D1IDUNsY1/g3370XoDJfrqEg3GTk41T1U3AJj+F9/m4kYaNMcakUGlphEgkQmkE/ztCaakbhahh/fImHK6cMhOUiJwNXOAfpgH/FZHimKe1ww0nv0eq+jmBG2pFpCXuxqxncXcRB+cKmgf0D7NdY4ypCYqKS8krKN7xU1hUQlFxKUXF0d+l8R+XlO54bnHgcXFJhJLSUkpKIpSUuoRRUlpKSWmEkpKYx2UsK/U/uyafnQkp+rg8hw/rzJ9O39Ocn3unvBrUi7jJv9Jw8wZ9hJtsKyriH79c0Z2KSDPcVN3fAt/7xdsDT9lOuFqZMcYkXXFJKZtzC9i0pYCc3AJytxeSV1DM9vziXZLO9ujf+YHH/u/ikoRO+1Xl0tPTSE+DtLQ00tLc3+npabRsWj9p+ywzQfmmvBsB/MyVE2LHSdobItITmIirMZ2JG5WCwG9wySkXY4xJkpLSCFu2FZCztYBNWwvI2Zq/42+XiPJ3/L11e+XnbUxPT6NBduaOn+ysdLIyM8jKTA/8xH9czz/OjC7L8I8z0klPTyMjI42M9OhP7LJ0MtLTAsvSdzw3Lc0t3zX5QLpfHk1EaWlpey5gEoTtxfe0iAz20xRn+MVpuGmMh6rq+WG2IyKjcMnpYeBqP5NnvoisxnWSWOGf2otdm/yMMabCCotKWLEulyWrt7JsjftZvWEbm7YWsCW3YI/NV1HpadC0cTYtmmTTvHE2TRrV25FoGmZn0qB+5i7Jp2H9rF0eN6ifSb3M9JQd6GuqsGPxXYMb0igXaARsBpr51e+U9bqYbXQD3gKuUdV/xqx+FrhBRGYAjXFTeN8bZrvGGJNfUMzytbksXbMzES1ds5U1G7aVm4SaNKxHi6bRxFN/599NsmnepP6Ov5s2yiYj3ZJLVQvbi+984ApVvUtElgMHAcW4buOTQ27jIlwX9VtFJHiP0wPA9cBdwGxc1/dHcbUsY4zZYXt+kUtEq3cmoaVrtrJ24/a4z09PT6Nj60Z0adeELm2b0LltEzq0aUTLpvVp1jibzAybs7U6C5ug2uGSEcA0YISqviQifwGewl+rKo+qXgZcVs5TLvI/xhgDuOtEC5dtYsrctXw/bw0Ll+cQb47VzIw0OrRpTOe2OxNRF5+MsjIzdn+BqRHCJqh1QCtcl/L5wEDc4LErgA5JicwYUydtzi1g6vx1fD93Dd/PW7tLB4XMjHQ67dPYJaF2OxNR+9aNrDZUC4VNUBNxcz+dA3wCPCAiHwAnA0uSFZwxpvYrLY2waEXOjlrS/KWbdqkltW3ZkGG92zKsd1v6dWtF/Xo1fiJwE1LY//TlwN1AP9wUGyez876oM5ITmjGmtsrdXshUXceUeWv437y15OTuvIMlMyOdfvu3YmjvtgzrvQ8d2zS23m91VNgEdTKu990G/3iciPwByFfV2NEljDFmN4tXbeG72auZMncNumTjLr3r2rRowNBebRnWax8G9GhDg2yrJZnwCeo+4DvcvFAAqKrdSGuM2aNZi9bz4gfzmbZg3Y5lGelpDOjWiqG92jK09z50advEaklmN2ET1LfAibipMowxplyRSITpC9Yx4YP5zP7Bndc2yM7kkIEdGN6nLQN7tEnqIKOmdgiboEqBW0TkWtzI5nnBlap6QKIDM8bUPJFIhClz1/Dih/PRJZsAaNQgi1+O3J/jRu5Pk4b1UhyhqUkqUoP6NpmBGGNqrtLSCN/OXsWLH85n0fLNADRtVI8TDu3GMQfvZ7Uls1fCjsU3PtmBGGNqnpLSCF9OX8F/PpzPktVbAWjeJJuTRnfn6BH7Ut86O5hKsE+PMabCSkpKmTR1Of/5cAEr1rn+Uq2b1efkw3vwswO7kp1lozeYyrMEZYwJrai4lI+nLOXljxeweoMb/26flg059fAeHDG8sw0rZBLKEpQxZo8Ki0r44NslvPzJQtbnuD5SHds04tQjenLokE42zJBJCktQxphyLVqew61PT2aNHzG8S7smjDmiJ4cM6mhTUJikCjsfVAPgAmAokIWbrHAHVR2T+NCMMan24XdLeeiV6RQWl9K1XRPOOKoXB/VrT7olJlMFwtagHgVOAt4DtiQvHGNMdVBUXMJjr8/i3a8XA3DUQV353Qn9qWedH0wVCpugfg6coaoTkxmMMSb11ufkcdvTk9Glm8jKTOeCkwZw5IFdUx2WqYPCJqgi3DxQxphabMbCddz+7BQ25xbSpkUDrjprOD06t0h1WKaOCtv15h7gNhFpk8xgjDGpEYlEePWTBVz38Fdszi1kUM823HPpoZacTEqFrUGNAQYAq0VkK1AYXKmq+yQ6MGNM1dieX8R9L07jyxkrATj1iB6c+fPe1kPPpFzYBHV/UqMwxqTEsjVbueWp71i+NpeG9TO59FdDGNG/farDMgYIPxbf09G/RaQpkK6qOUmLyhiTdF/OWMm9E/5HXkEJnds24ZrfHkDHNo1THZYxO4S+UVdELgSuBjr4x2uBe1XV5ogypgYpKSnlmXfm8uqnCwEYOagjF48ZZLPYmmon7I26lwPXAX8HvsDdqHswcKWI5KnqvckL0RiTKDlbC7jjuSnMWLie9PQ0fntsX44ftb/NZmuqpbCnTBcBF6jqC4FlX4rIEuBmwBKUMdXc/KWbuPWp71i/OZ/mjbP5y2+G0b9b61SHZUyZwiaoNsDkOMu/BzolLhxjTKJFIhH++80SHnltJsUlpfTq2oIrzxpOq2YNUh2aMeUKm6BmAacCt8YsPw2Yl9CIjDEJE4lEeOKN2Uz8bBEAxxy8H+f8sh9ZmTb6uKn+wiao64G3RWQE8LVfNgI3BNJJyQjMGFN5Ez/7gYmfLSIzI52Lxwzi8GGdUx2SMaGFOo1S1feBI4ACYCxwCm7Q2OGq+lbywjPG7K2vZ67iyTdnAXDprwZbcjI1Tuh+par6GfBZEmMxxiTI/KWbuPP574lE4NdH9+LQIXap2NQ8ZSYoEfkPcK6qbvF/l8nmgzKm+lizcTs3PfkthUUl/HR4F8Yc0TPVIRmzV8qrQW0DIoG/jTHVXG5eEeMf/4acrQUM6N6a358y0O5xMjVWmQlKVX8beHgDsFxVS4PPEZEMYFCSYjPGVEBxSSn/9/Rklq3ZSue2Tbhq3AHWW8/UaGE/vT8CreIs7wJ8nrhwjDF7IxKJ8ODL05m2YB3NG2dzw7kH0bhBVqrDMqZSyrsGdTZwgX+YBvxXRIpjntYOWJyc0IwxYb388QI++G4p9bIyuO6cA2nbsmGqQzKm0sq7BvUibpSINGAY8BGQG1gf8Y9fTlp0xpg9+mzqcp55Zy5paXD5mUPo2cUmGTS1Q3nXoLYBNwKIyGJgAlCiqsV+WXtVXVUFMRpjyjDnxw38Y8JUAM4+ri8j+ndIcUTGJE7Ya1Af+J8bA8tmichHNg28Mamxcn0uNz/5HUXFpRz9k305flS3VIdkTEKFTVAPANuBRwLLhuBGlrgv0UEZY8q3ZVsh4x/7hq3bCxnWuy3nn9DfupObWifsSBKHAQeq6pLoAlVd4ueJ+qKiOxWRA4C3VHUf/zgb2AoUBp72laoeWdFtG1PbFRWXcMtT37Fy/Tb279CMK349lIwM605uap+wCSoPN5OuxixvBZSE3ZmIpAHnAHfGrOoPbFTVdmG3ZUxdFIlEuHfCNGb/sIFWzepz/bkH0rC+dSc3tVPYBDUBeExELgWm4HrwDQHuBl6qwP7GA8fgJjm8NrB8KDCtAtsxpk56/r/zmDR1OQ2yM7j+nINsTidTq4VNUFcBLYFXgQy/rBR4HLi8Avt7WFWvF5HRMcuHAPuIyAygLW5Q2ktVdUUFtm1Mrfbhd0t58YP5pKfBX8YOZ/+OzVIdkjFJFXa6jXxVPQtoDRwIDAZaqOqFqro97M5UdWUZq7YBX+Km9BBck+JrYbdrTG03fcE67n/JNTKcf9IAhvVum+KIjEm+0NNtiEgT4Ne4BHITMEpE5qrqj5UNQlUvi9nXZcA6Eemsqssqu31jarKlq7dw61PfUVIa4YRDu/GLn+yX6pCMqRKhalAi0hPXQeKPwIVAU+B0YLqI/KSyQYjIjSLSO7Conv+dX9ltG1OT5WwtYPwT37Itv5gR/dvz22P7pjokY6pM2L6p9wL/UdVeuHufUNWxwLPAHQmIYwBwl4g0F5Hmfn9vq+q6BGzbmBopEolw/0vTWLtxOz06N+eyM4aQnm73Opm6I2yCGgE8GGf53cDABMRxDrAJWIgbfLYQN7W8MXXWZ1NX8O3s1TSsn8nV4w6gfr3QLfLG1AoVuQ9qH2B+zPIewJaK7lRVPwWaBx5vAM6s6HaMqa1ythbwyGszATj7uH60bm7dyU3dE7YG9TTwgIiM8I/biMgvgYeA55MSmTF12MOvzWDr9kIG9WjDkQd2SXU4xqRE2BrUtbibcz8GsoGvgWJcs9/VyQnNmLrpyxkr+XL6SurXy+APYwbZGHumzipvwsKbgTtVNQc3zNE1uJEguvnXLfRTchhjEmTLtkIefnUGAOOO6WMTD5o6rbwa1J9xI0Xk4KZ8b+d71c2uisCMqYsenziTnK0F9N2/FUfb/U6mjisvQS0AXhWR6bhZde8Tkbx4T1TVs5MRnDF1yeQ5q/nk++XUy8rgj6cNsi7lps4rL0GNAS5jZ2+7Rnt4vjFmL+XmFXH/S9MBGHt0Lzq0bpziiIxJvfKmfJ8H/A5ARD4BfuOvRxljEuxfb85m45Z8pGsLjhtpM+MaAyFrRKp6mIhkikh3IAvX5BdcPycZwRlTF0zVtbz/7RIyM9K55LTBZFjTnjFAyAQlIscA/8JNUBj77YmwcwoOY0wFbM8v2jFK+RlHCZ3bNklxRMZUH2GvKd2Cm6NpPHsxcoQxJr5n3pnL2k15dOvUjBNHd091OMZUK2ETVHfgNH9dyhiTADMXreftL38kIz2NS04bTGZG2IFdjKkbwn4jvgP6JzMQY+qS/MJi/vmia9ob89Oe7NfBZsc1JlbYGtRrwKN+qvYFuNHGd1DVeCOdG2PK8Px781i1YRtd2zXh1CN6pjocY6qlsAnqT7gRJX4RZ12E+FNxGGPimLdkIxM/W0R6ehqX/GowWZnWtGdMPGG7mduYK8YkQGFRCfdOmEokAicf1p0enVukOiRjqq3yBovtA8xT1VL/d5nsPihjwpnwgbJ8bS4d2zTm9CMl1eEYU62VV4OaBbQD1vq/I+x+DxTYfVDGhLJwWQ6vfLKQtDS45LTB1Muyr40x5SkvQe0HrAv8bYzZS0XFpdz74lRKSyMcP6obvfdrmeqQjKn2yhuLb0m8v40xFffyR/NZvGoL7Vs14tdH90p1OMbUCNZ9yJgk+3HlZl78cD4AF48ZRP16NimAMWFYgjImiUpKSrnvxamUlEb4xU/2pX/31qkOyZgawxKUMUn06qcLWbh8M21aNOCsY8rtDGuMiWEJypgkWbkulxfeVwD+cOogGtbPSnFExtQsYafb6AHcCQwl/nxQ+yQ+NGNqtscmzqKouJTDh3VmiNhXxJiKCnu19hGgPfB/2HQbxuzR5DmrmTJ3DQ3rZzLuWGvaM2ZvhE1Qw4HRqvp9MoMxpjYoKi7h8YmzADj9yF60aFI/xREZUzOFvQa1DLBvmTEhvPHZD6xcv43ObRtz7CF2j7sxeytsDeo64CERuYn4023YWHzGABs25/Hih65jxHnH97dJCI2phLAJ6iX/+8XAsujYfDYWnzHe02/PIa+ghIP6tWOwdYwwplLCJihrpzBmD+b+uJFPvl9OVmY65/yyX6rDMabGCzsflI3FZ0w5SkojPPr6DABOGt2ddq0apTgiY2q+8uaDWgv0UdX1IrIO15QXl90HZeq6D79bysLlm2ndrD6nHN4j1eEYUyuUV4O6Atjq/768CmIxpkbKzSvimXdcP6Gzj+tH/WwbDNaYRChvuo2n4/1tjNnVC/+dx5ZthfTdvxWHDOqQ6nCMqTWsD6wxlbBk9Rbe+vJH0tPg/BP7k5YWb9JpY8zesARlzF6KRCI89vpMSksj/HzEvuzXoVmqQzKmVrEEZcxe+nrmKqYvWE+Thlmc+fPeqQ7HmFrHEpQxe6GgqIQn3nDj7f366N40bVQvxREZU/uEnW6jAXABZU+3MaYiOxWRA4C3ot3TRaQecD9wClAC3K2qt1Zkm8ZUpVc/WcjaTXns16EpRx20b6rDMaZWCtsf9lHgJOA9KjHdhoikAefg5pYKGg8I0A1oBrwnIitU9Zm93ZcxybJ243Ze/mg+AL87oT8Z6dYxwphkCJugfg6coaoTK7m/8cAxwM3AtYHlZwHjVHUTsElE7gTOByxBmWrnybdmU1hcyqhBHenXrXWqwzGm1gp7DaoImJ+A/T2sqkOBKdEFItIcNxlicET0eUD/BOzPmISasXAdX05fSXa9DMYd2zfV4RhTq4VNUPcAt4lIm8rsTFVXxlnc2P/eHli2HWhYmX0Zk2glJaU8+tpMAE49ogdtWjRIcUTG1G5hm/jGAAOA1SKyld3ng6rMWHzb/O/gt70hkFuJbRqTcO9+vZglq7fStmVDTjy0e6rDMabWC5ug7k9WAKq6SURW4zpJrPCLe7Frk58xKbU5t4Dn3psHwLnH96Nelk2BZkyyhZ1uY8dYfCLSFEhX1ZwExvEscIOIzMA1+V0O3JvA7RtTKc++O5dteUUM7v7e21cAACAASURBVNmGA/u2S3U4xtQJoW/UFZELRWQZsAnYICKrROTKBMVxPTALmA1MBl4BHk7Qto2plIXLc3j/2yVkpKdx3gk23p4xVSXsjbqXA9cBfwe+wN2oezBwpYjkqWqFajuq+inQPPA4H7jI/xhTbUQiER59bSaRCBw3an86t22S6pCMqTPCXoO6CLhAVV8ILPtSRJbg7mmy5jhTK03633LmLt5I88bZ/OpnkupwjKlTwjbxtcE1vcX6HuiUuHCMqT625xfxr7dmA3DWMb1p1CArxREZU7eETVCzgFPjLD8Nd1OtMbXOSx8tYOOWAnp0bs7hw7qkOhxj6pywTXzXA2+LyAjga79sBG4IpJOSEZgxqbRszVZen7QQcBMRptt4e8ZUuVA1KFV9HzgCKADG4kYd3wIMV9W3kheeMVUvEonw4CvTKS6JcOSBXZGuLVMdkjF1UtgaFKr6GfBZEmMxplr4aPIyZi3aQLPG9Rh3bJ9Uh2NMnVVmghKR/wDnquoW/3eZKjoflDHV1ebcAp5803WMOPu4fjRpaBMRGpMq5dWgtgGRwN/G1HpPvTWHrdsLGdC9NYcNtQ6qxqRSmQlKVX8beHgDsFxVS4PPEZEMYFCSYjOmSs1atJ4PJy8lMyOdC08eYCNGGJNiYbuZ/wi0irO8C/B54sIxJjWKikt58JXpgJtKo9M+NmKEMalW3jWos4EL/MM04L8iUhzztHbA4uSEZkzVefXTBSxbk0uH1o045fAeqQ7HGEP516BexI0SkQYMAz5i1zmaIv7xy0mLzpgqsGr9Nv7zgZsw+venDLSpNIypJsq7BrUNuBFARBYDE4ASVS32y9qr6qoqiNGYpIlEIjz0ynQKi0sZPbQTA3tUatJoY0wChb0G9YH/uTGwbJaIfFTZaeCNSaXPp61g6vx1NG6QxTnH9Ut1OMaYgLAJ6gFgO/BIYNkQ3MgS9yU6KGOqQm5eEY9NnAXAuGP70LxJdoojMsYEhU1QhwGXqOqS6AL/9+XAUckIzJhke+adOeRsLaD3vi352QFdUx2OMSZG2ASVB3SIs7wVUJK4cIypGrpkI+99vZiM9DQuOmWgDQZrTDUUdiy+CcBjInIpMAXXg28IcDfwUpJiMyYpSkpKeeDl6UQicMLobnRt3zTVIRlj4giboK4CWgKvAtE+uKXA47hmPmNqjDe/+IEfV25hn5YN+dWRNkuuMdVVqASlqvnAWSJyMdATKAR+UNXc8l9pTPWydtN2nn/PzbF54UkDqF8v9ID+xpgqFurbKSLBOQe2+99dRNzZp6rOSXBcxiTFo6/NJL+whIMHdGBY77apDscYU46wp4+zcNedoleSI4HfpYDNSWCqvW9mreLb2atpkJ3JeSfYPU/GVHdhE9R+cV7XDbgJN9K5MdVaXkExj7w2E4CxR/emVbMGKY7IGLMnYa9BLYmzeJGIbAaeAt5LZFDGJNq//zuP9Tl5dO/cnF8cHHu+ZYypjsLeB1WWAsDucDTV2g8rNvPG5z+QngYXnTKQDLvnyZgaIWwnid/HWdwMOB/4IqERGZNAJaURHnh5GqWlEX45cn+6d2qe6pCMMSGFvQZ1RczjCK6r+efANQmNyJgEeu/rxcxfmkOrZvU58+e9Uh2OMaYCwl6DskZ7U+Ns3JLPM++4OyB+d0J/GtbPSnFExpiKKG9G3VFhN6KqnyUmHGMS5/GJs9ieX8zwPm0Z0b99qsMxxlRQeTWoT2MeR++DKsUNEJvl/y4EGiYjOGP21vfz1vD5tBVk18vgghMHkJZmHSOMqWnK68XXJPDzW2AmMALIVtVsYBAwGfhTsoM0piI2bsnn3glTATjjSGGflnb+ZExNtKcp3wEQkZuAk1V1cmD9DBG5CHiXXScyNCZliktKuf3ZKWzaWkD/bq05flS3VIdkjNlLYe+DasrOUcyDmhC+J6AxSff023OY/cMGWjbN5oqxQ8nIqOytfsaYVAmbXF4G/iUifwKm4q5FHYibD+qZJMVmTIV8OX0lr09aREZ6Gn/9zXBaNKmf6pCMMZUQNkFdDDwETAy8pgg3H1TsPVLGVLnla7dy74v/A+Ds4/rSZ79WKY7IGFNZYe+DygPG+fmgojO8zbP5oEx1kFdQzC1PTSavoISRgzpy3Mj9Ux2SMSYBQjfQi0gTYKz/WQyMEhG7gdekVCQS4f7/TGPZmq10btuYi8cMsi7lxtQSoRKUiPQEFPgjcCGu08TpwHQR+UnywjOmfG998SOfTVtBg+wMrjrrABpkW58dY2qLsDWoe4H/qGov3AjmqOpY4FngjkQEIiJni0iRiOQGfs5KxLZN7TT3x4088cYsAP542mA6t22S4oiMMYkU9nRzBHBJnOV3A9MTFMsQ4C5VvTJB2zO1WM7WAm57ZjIlpRGOH9WNQwZ2THVIxpgEC1uDygP2ibO8B7AlQbEMBaYlaFumFispKeWO56awcUs+ffZrybhj+6Q6JGNMEoStQT0NPCAiF/jHbUSkH67p7/nKBiEiGcAAYKyI3A1sx3Vh/z9VjVR2+6Z2ee69ecxYuJ7mTbL5y9hhZNrNuMbUSmET1LW4wWI/BrKBr4Fi4EHg6gTE0QaYgkuEJwG9cfdcbfH7MAaAb2at4uWPF5CensZfxg6jVbMGqQ7JGJMkYRPUKGC8/+nmX7cwOF5fZajqauDQwKJpIvJP4GQsQRlv5fpc7nnB3Yx71i/60L9b6xRHZIxJprAJ6j/A4ao6A5id6CBEpC8wRlVvCCyuB+Qnel+mZsovLObWpyazPb+YEf3bc+JoGwTWmNoubIJaCAwEZiQpjhzgzyKyHHgCGIy75+oPSdqfqUEikQgPvjydxau20LFNIy791WC7GdeYOiBsgloAPCUiVwGLcL36dlDVMZUJQlVXiMgvgduBe4D1wE2q+nJltmtqh/e+Xswn3y8nu567GdembjembgiboIpJ8qjlqvoxMCyZ+zA1z/ylm3j0dXcz7h9OHUTX9k1THJExpqqEHSz2t8kOxJhYm3MLuPXpyRSXlHLswfsxekinVIdkjKlCdgOJqZZKSiPc+fz3rM/JQ7q24Oxf9kt1SMaYKmYJylRLL7w/j2nz19GscT2u/M1wsjLto2pMXWPfelPtfDxlKS9+MJ/0NLjizGG0bm434xpTF4WdbmOUiOx2vUpEskXkxMSHZeqqVz9ZyD0vTAXgrGP6MLBnmxRHZIxJlbC9+D4B2gHrYpbvD/wbsFNcUymlpRH+9dZsXp+0CIDzju/HL0fZzbjG1GVlJigRuRA3tBFAGjBHRGIHbm0MTE1SbKaOKCou5d4JU5k0dTmZGWn86fQhjBpsPfaMqevKq0E9BmzDNQM+CdwEbA6sjwC5wEdJi87Uetvzi7jt6clMnb+OBtkZXD3uAAb1jDezizGmrikzQanqjptzReRH4Eu/zJiEyNlawPjHv2bh8s00b5zNDecdRPdOzVMdljGmmgh7Deoz4AQRGQpk4Zr8dlDVvyQ6MFO7rd6wjesf/ZpV67fRrlVDbvzdT2jfulGqwzLGVCNhE9Q/gItw07vHzqBrEwqaClm0PIe/Pf4NOVsL6NapGTecexAtmtRPdVjGmGombII6FbhAVR9PZjCm9pu+YB1//9d35BUUM7BHa64eZ4O/GmPiC5ugsoFJyQzE1H6fT1vB3f/+H8UlpYwc1JE/nT6YrMyMVIdljKmmwo4k8SRwebybdY0J483Pf+CO56ZQXFLKL0fuz+VnDrXkZIwpV9iEsz9wLDBGRJYAhcGVqnpAogMztUMkEuHZd+fy0kcLADc6xMmHdbcJB40xexQ2Qc0gebPpmlqqpKSUB16ezgffLSU9PY2LTx3ETw/okuqwjDE1RNj5oMbv+VnG7JRfWMztz05h8pw11MvK4MrfDGN4n3apDssYU4OEvqYkIgcCfwZ6AscBpwM/qupLSYrN1FBbthVy0xPfMG/JJpo0zOL6cw+iV9eWqQ7LGFPDhB3N/BfAx8AmQHA362YCz4nI2ckLz9Q0Mxau4y///Ix5SzbRpkUD/u8PIy05GWP2SthefDcCl6rq+UAxgKreAvwBsFEkDKs3bOOWp77jmoe+YsW6bXRt14Q7Lh5J57ZNUh2aMaaGCtvE1xv4MM7yj4D7EheOqWm25xfx0kcLeH3SIopLSqlfL4NTjujBCYd2JzvLupEbY/Ze2AS1HBgG/Biz/GfAkoRGZGqE0tIIH09ZyjPvzGXT1gIADhvaibOO6UOrZjY9mDGm8sImqL8Dj4hIdyADOFZE9gUuAC5OUmymmprz4wYee30mC5e72VekawvOO74fYteajDEJFLab+TMisga4CjdH1HhgLnCGqr6exPhMNbJ203aefmsOn01bAUCrZvUZd0wfRg3uRHq63XhrjEmsigxd9D4wRVU3AIjIcGw23Tohv6CYVz5ZyKufLqSwqIR6memceFh3TjmsB/WzbfQrY0xyhDq6iEgf4C3gFeAKv/hNYJOIHKuqi5IUn0mhSCTCpKkrePqt2azfnA/AyEEdGXdMH/Zp2TDF0Rljaruwp7/3A5/jmvai9gMe8uuOTnBcJsXmL93EY6/PZN6STQB069SM847vT9/9W6U4MmNMXRE2QQ0HzlPV3OgCVc0TkZuB/yUlMpMSazdt5/n35vHxlGUANG+SzW+O7s0Rw7vYdSZjTJUKm6A2Av2A2Ka8nsDWhEZkqtzm3AK+mrGSSVNXMOfHDUQikJmRzvGj9mfMT3vahILGmJQIm6AeBx4Vkc7AFNw070OA64AnkhSbSaLcvCK+mbmKz6etYNqCdZSWRgDIykxnRL/2/Pro3rRv3SjFURpj6rKK3AeViUtIbfyytcA9wB1JiMskQX5BMZPnrGHS1OV8P28txSWlAGSkpzG01z6MGtyRA/u2p1EDqzEZY1IvbII6E7hPVW8QkdZAoapuSWJcJkGKikv4ft5aPp+6gm/nrKagsASAtDQY0L01Iwd1ZET/9jRrnJ3iSI0xZldhE9R9wHfABlVdn8R4TAKUlJQyfeF6Pp+6gq9nrmRbfvGOddK1BaMGdeTggR1sSCJjTLUWNkF9C5wI3JbEWMxeikQirNm4nYXLc5ixcD1fzVjJ5tzCHev379CMkYM7csjADrRrZdeVjDE1Q9gEVQrcIiLX4gaMzQuuVNUDEh2YiS8SibBqwzYWLdvMwuU5LFyew6IVm9mWV7TL8zq2acyowR0ZOaijTXlhjKmRKlKD+jaZgZjdlZa6ZLRwmU9Eyzfzw4qcXZrsopo3zqZbp2b06NyCEf3bs1+HpqSl2X1LxpiaK+xgseP3/CxTGfkFxazdtJ0fVmxm4XJXO/phxWbyCnZPRi2aZNOtU3O6d2pO907N6NapOa2a1beEZIypVUKP9CkiY3Dj8PXA3QP1e2C1qt6ZpNhqjYKiEjbk5LEuJ4/1OXms35zH+px897f/yY1pootq2bT+LomoW6dm1rnBGFMnhB0sdhxwJ3AX7l4ogHnA3SKSqaqV7jwhIgOBh4EBwA/A2ao6ubLbTZaSklK25RezLa+IbXlF5OYVsmlrAet9ItrgE9C6nDy2bi/c4/YyM9Jp3bw+Xds19bWjZnTv1JwWTetXQWmMMab6CVuD+jNwoaq+JCJXA6jq4yKyCZe4KpWgRKQeMBH4BzAKOBl4X0S6VsX9VgVFJcz7cSO5eUXk+oSzPd8nHv97l5/8IvIKSkJvPzMjjZbNGtCmeQNaN2tA6+b1ad28gftp5n43a1zPmuiMMSYgbILqhhviKNY0oF0C4hgNZKnqP/zjCSLyB+A04LEEbL9cdz43hW9mra7Qa9LToGH9LBo1cD+NG2TRrHG2Tzz1dySeNs0b0Kxxtg20aowxFRQ2QSnwU3ZPFmNwTX2V1Qc3Q2/QPKB/Ara9R4cM7Eh+QQkN6mfSuMHOpNOo/s7ks+uyTBpkZ1qNxxhjkihsgroaeFlEhvnXXCAi3YFjgVMSEEdjYHvMsu1AlcyKd+iQThw6pFNV7MoYY0xI6WGepKrvAgcA2cAs4GdAPnCQqr6RgDi2AbFd0xoCuXGea4wxpg4I3c1cVWcD45IUxxzgTzHLegHPJGl/xhhjqrkyE5SINMT1qjsFKABeA65MUq+6T4A0EfkTbgr5k3HdzV9Lwr6MMcbUAOU18Y0HjgNuB+4GjiFJPepUtRA4GpeYNgLXACeo6rpk7M8YY0z1V14T3ynAGar6CYCITAI+E5EsVY0/7EElqOos4JBEb9cYY0zNVF4NqhO7diGf7J/fNqkRGWOMMZRfg8oAdgyXoKoRESkA6iU9qorJAFi9umI32hpjjEm9wLE7I3Zd6F581Vh7gDPPPDPVcRhjjNl77YFFwQV7SlDjRCR4L1Im8GsR2WXad1V9MDHx7ZXJwEhgFYEanzHGmBohA5ecdhscPC0SicR9hYgsBuKv3FVEVfevRHDGGGPMbspMUMYYY0wqhRrqyBhjjKlqlqCMMcZUS5agjDHGVEuWoIwxxlRLlqCMMcZUS5agjDHGVEuWoIwxxlRLtWGoo0oRkYHAw7j5p34AzlbV3e5orq5E5GfAbUAPYC1wh6o+IiL1cHNrnYIbYeNuVb018LoxwC24O7gnAeNUdW1Vxx+WiDQHZgDXq+pTtaV8ItIeeAg4DDdL9aOqel0tKt9BwH2AAOuA21T18ZpePhE5AHhLVffxj/e6PCLSBXgCOAj3Hb5YVd+pwuLsJk759gHuBY4A0oB3gUtUdZNfn5Ty1ekalP9QTQReBJoDfwfeF5GmKQ0sJBHpDLwC3IyL/3TgVhE5CjeflwDdgOHAWSLyG/+6PrgPzDigFbAAmFDV8VfQw0DHwOPaUr6JuGG62uK+wGeJyBnUgvKJSDqufPepajPc5/N+f1JYI8snImkici7wPrsOnF2Z8kzAnXy1As4DJohISkbnKad8jwPFwH64k+EWwAP+NUkrX51OUMBoIEtV/6GqRao6AZgNnJbasELbF/i3qr6mqqW+5vcpcDBwFvB3Vd2kqouBO4Hz/et+Dbypql+oaj5wFXCwiPSo6gKEISJnAU2BmYHFNb58InIgsD/wR1XNV9UfcZ/JT6gF5cMdxPbBzZadhhs6rRgopOaWbzxwIe6kMGivyiMiPYFhuJaBQlX9GHgDOKcKyhLPbuXzJxqlwHhV3aaqObjJa6Pz9yWtfHU9QfUB5sYsmwf0T0EsFaaqn6vqBdHHItISN3DuVFxVe07g6cFy9QmuU9XtwDKqYblFZD/gBuDswLLm1I7yDcUl3b+JyAoRWQScCORRC8qnqhtwzV5PA0W4wUCvxtUYa2r5HlbVocCU6IJKfh77AEtVdVsZr61qu5XPn/yeoKoLA887AXecgSSWr65fg2oMbI9Zth1omIJYKkVEmuHOTL4FvveLg2ULlqtGlFtEMoDngMtVdbWIRFc19r9rdPmA6AnFJFxNqhfwHu5aDdTw8vkz73zgDFxT9E+AV4Ec/5QaVz5VXRlncWU/j9WmrGWUbxcicjkuQf3EL0pa+ep6gtoGNIhZ1hDIjfPcastXoyfizmLOZGeZgmULlqumlPs6QFX11Zjl0bOxml6+AmCLqv7NP54uIo/jmoug5pfvJOBgVb3CP54kIk9Qe8oXVZnPY1o566oVEckC/gkcBxyuqtEZ15NWvrrexDcHd2EzqBe7VtWrNREZhas1vQ6c4q9lbAJWs2vZguXapdwi0hDoQvUr96+AU0QkR0RycM0CD+I6s9SG8s0DGvrOOlGZQG35/3UGsmOWFeNqiLWhfABU8vs2B+giIg3KeG21ICJNgA9wHUAOUNVpgdVJK19dr0F9gruA+ydcW/nJuO7mr6U0qpBEpBvwFnCNqv4zZvWzwA0iMgNXBb8c100U4N/AFyIyGvgauBWYqqrzqyTwkFS1V/CxiEwD/uG7medSw8uH+8KvA+4SkT/jvuTn4C5S/0DNL9/7uF6lv8NdVB+C68V1LrCUml++oL3+vonIdODvInIVrtnseGBE1Ya/RxNwFZqR/hpTUNLKV6drUKpaCByNS0wbgWuAE1R1XbkvrD4uAprgDgK5gZ//A64HZuF6JU7GXQN4GEBVZ+I6HTwMrAf6AqemIP7KqPHl8z2eDsVdf1qFu/50u6q+Qu0o32xcM9/5uOtO/wauVNWJ1ILyxahMeU4GeuPuEXocOEdVZ1VZ5HsgIgOAXwAHAGsDx5nlkNzy2YSFxhhjqqU6XYMyxhhTfVmCMsYYUy1ZgjLGGFMtWYIyxhhTLVmCMsYYUy1ZgjLGGFMt1fUbdastEVkM3Kmq98cs3xf4EeifrHslRGQ9bvy7p5Kx/ZAxjMbdSN1EVXcbFqUq3oeaQkT+BhyrqsNSHUuyicixuJGz0/zjCHCcqr6VxH1OxN0g/klFvpcicihuoOPhuMrATOAeVX0x8LrgfT4R3Dh1M4FbVfWNwPPuByar6tMJL2A1ZjUoU1Mtw40gPW9PT6wD7gSOSnUQKdIeNyJHUojIiUB9Vf2kgq8bhLvx+n1cghoM/Ad4XkRip/MZiytHJ+BA/7pXRSR4s+uNwI0i0mqvClJDWQ3K1EiqWoIb/6zO8zXMaje4aFVQ1WR/BsbjpgipqLHAV6p6W2DZ3SLSHzeU1YuB5TmBcqwEZotII+BeEXlDVQtUda2IfARcDPxtL+KpkSxB1XD+g3wHbvj7NriD9iOqerNf/xSu2aABbjrqDcDjgfUZuKmaz8aNPPy3PezvH0AvVf25f3wq7szwJ6r6tV82Dzdkz5N+nMMLcZMr5gJvAxeqaq4fgPJh4OdAfeBz3HTQCwK7/LWI/BVoB3wBnK2qy2KbVHzTyz24+ZQOABbixih808fUwu/raGAzbqT0x4HufoK52HK2BO4GfukXvQ38QVU3i0hbv+5IoBmuNnerqj7uX/sp7qz+QOBnwHLcGHS9/H4bAs+o6iX++U/hRjZv7ONfCVynqi/49Zm4A+WZuFmFN+LGRrtMVUtim/hE5HAfn+Dm9fkYOFRVR/um05eBy3Bn5S2Az4BzVXVNnPch07+vp/qyfu/3+13gf3AGbgDfNsB/gfP9XFCISDvclO9Hs/P//2dV3ezXR4Df4g68vXHNW5cGPkvd/f/tJ8B83HBJwfh2NPH5930SMND/b5YBdwT+L9nAP3CDEBf79+gcX/ZP45R9NO5zuzc1tFKgt4h0VtVlgeV/YffRveN5ALgCN/nox37Zq8ATIvJ3VS3ai5hqHGviq/nuxg28eALugHQfcJOIDA0851zcQXIY7qAcXH8dbvqDscDhuLHTymtGeBc4xA+9D3AYru18JICIdAF6Au+KyOm4hHcZbprocbiBIqMzjd6MG4duNG4g0VLgyZj9nYVLrCNx003fXk5sN+IOZsNw007/KzBS+At+X4fhZgC9BsgoZ1uv4UZPPwb3vvTFT3ENPIObKfYI3IRsbwAP+YNx1DW4KVD645Lla77sRwJ/Ai72iSRqHLDFvw/3A8/5AyS4A9VY/1708I8vwv3Pd+EneHwbeAcYhEtGsTWA5sAFuDHSTsAl0mvLeB8uxp1AHOffg/nAy+JmyI26FXcSMhr3P3opsO5V3HFmhN9GN3afvv1m3OdwBG623Ud9WbJ8Obbh/qc3AleWEWfUX3EJZTDwIbv+X+7Fvf8n+DKdhPtMlOUY4FNVLdjDPuN5HGgELBKRd0XkchEZoKrrVHXpnl6sqktw5e4bWPwh7rs5NO6LaiGrQVVvd4nIbTHL0mIef4mrMf3PP75DRK7HHTijExcuUtXr/N83+1rNUBH5H+5AdZOqvgcgIr8BFpcT0yQfw4G4Gs1huBHVR+KSx1G4kYxXichKYFzgAvYSEZnkYwN3droV+NHXqM71y4IuipbN1zTOKCe2F1R1gn/ueGA6sK+4iQ6PAgaq6gy//mJcst2NiPQFRgGDVHW6X/Y73EENXAJ4S1V/8OtuBi7FJY9oU80nqvqEX/8v/9qL/ayks32tpy87z46X+LKWAvN8croQ+BQ3AOk4VZ3kn7tYRK7w7+MrMeGfB8xV1WhSUhEZgauBRmXgakHf+/ieAw6K917g/h/bgcWquk5ELsMd/IMnt9ep6n/9ts4BpopIb7/PAcBh0YO8iJwJrBCRfoHOLfer6jt+/R3ARF/bORw3bcNBqroRmCNu7rNby4gVXEJ5wG/rKuD3wAA/+v1vgVOj76OIjGX3GbWDhgHflLO+TKqq/iTwr7ha+M9x383vgDNjZqctSw7QNLDNfBH5oTJx1TSWoKq3W3EzygZ1xB20op4DjvVftp64s+bG7Fo7CDaZgUsKWUBroC0QTW6o6nKfWKK1oeC8LZ+r6tG+KeVwEVmIO4BdCLzmz6qPwh3AUdVJIjLMH8B74Q7IgquBRMv3NrDOJ67XcdMWBC0K/J1D+c0jwekYtvjfWbimowJc81HU1+Vspw/uTH5GdIGqTmHnNNgPAaf6g3VP3AEbdn3Pgweg6PQEPwSW5bPrXElf+eQU9R2uSQ9VfUNEDhOR2/3+BuDe93g1wAG40bSDvsY1HQbFvldZxHc/rua3UkS+wtUWn/JNi9HnfB54/nTce90P99lqCGwIPDdKcKN/x4sF3LGpH7DEJ6eo78qIM2rHtlR1i99vFu7zV4/Ae6Oq88TNM1aWtrjRuYOKiN/ylB5YH93+QuA8f3IzGJeoLgHeEJG+qrqnkbqb4pqjgzbgau91gjXxVW/rVXVh8Ad3ph30JG4SvzzcgX8EO6fUjiqMs+20Mv4OPn8lLuFFf871y9/Fnd2Oxk2W+CXuyz/IL4+eDY/DHbxa+tf8CneAA0BVv8EdaM/BzYt0C/C1iNQPxFJSTtyxyipn0R5eF287cQ8ePgn/Fze9wnpcsjo4zlN3u0YQk4BiFcc8TseX3de2XsUlpFdw13Oml7Gdsg6gsWLfq7jvj78eKLhrUAr8GVdDCtbIYmNP87Fn4j6vg2J+euB6t5UVSzCesj6bZSnvMwAVLLe9HAAABR1JREFUO+aVxtn/Jty1uFgt/O8ccDVBETkQQFUjqvo/dTMnn447Yepa3o7FzfXWhN3/zxns/p2otawGVYP5TgZjgZ+p6sd+WTvcFyjMAXk9bh6iA4Gv/Otb42ZCRVWL2bUmEPUucBeuRjBJVYv82fUVuC9P9Cz3ItxF6uv9ttNwB6cp/vFVuHs7/g382zffKK4WkEizcQm0PztrRcPLef58XO2mj39t9J6W54Bjcc2a3QJNfAf411UkCcYaEvP4AHYenC7CdSx40u8vG3eAi7e/WbhrJ0HllbVcInIeblr6F4HXRaQx7ix+FDv/z0Nw1zjB1RTq+di3AR2ArdEOGL5W/k/cdcmte9j9DFwTbdtAB47Y9ymshbha61BghY+lO//f3vmEWFWGYfzXIiITclGLoEg3PRBtgoSKIioJHBeRBqVihFAuMiqwIBTMJDFqioqJZIqpESkIM5AMI/szizCYGkqy3lCyhehG+wOVLbIWz3fweOfeOzb+mXvnvj+YzZ1z73nPx7nf+73P+3z3uB/XisPY+FFnDBs2GrkROFSL8w6sUHzZcNzvOKH/MkG8D+Ax/aLh9UvoIfdqJqju5hieBBZK+glPBs/hiavxUdvjiIh/Jb0IrC7a9j7gWSa4LyJiv6SfsQQ1v7z8GbAe2FKrFI4At0q6usT0GJ70K6ntcmBZ6T0d4oRR4Ee80j4jRMQ+SduBQUkP4Qm0egLxuEopIr6XtBN4XdLKckw/sAsn9X+AeyVtwZLby+WtE455G64tUugwToLzOVGZHQEWSBrBss9TeMXe7HyvAaskPQO8hSvae3C/cDLMwqaao1gqXoBX8fVHfveX//8NbML9uf3lnvwOeEfSKjwxv4Ir6gOncO5duEc0XN5/BfDkZC4iIv6QNFhi/Q1LZ9Vm21ZS21fYEVhnABgtcusQrrJuxi7LdbXj1gJbJf2JVY5f8QJpA+4Z16W7WWVheR4em6U4gS8u2ykAkHQxXpg0SrjTlpT4uphiNV0CzMO9omEsnezg1J0+z2Pr7Sa8WhtjfM+qGZXBoOrlVOaJHbVjHsFf/lHsQLoA952qVfATWB7chiei24C+iGjXF5gsy/HKeQTb4qsd+a0ko2VYnvoUj+nX2GZ+EHiw/P2Ak9OreLV/Ou6qj3B1+U2J9a6IqCqU+7E7bg/u0x0A3mh2vhLfndiptgdLSpvbXOdEvIDvqyFc3a4AFsXJj18fwi7Jj0v8S0osx3Hf5Sgex89xsu2rT7ytKBV8H5bndmO7e/8krwNsWBgBtmOn3zZ8f7Yamw+AG2pOUIrJ5nZ8D1ffl4eBxyPipdpx72NjxFXlXHuBjXisHm04z2a8QDuITTPX4TFqNMDchKunsf9z0d1MPlE3mfZImoEllw9rbrK5uKq4qEyEUxnfm8DMiLj7DHzWNcCMWnJD0gBwYUQsP93PbzjXbLro56YkLQQ+qRZAki7FjyG/spn1u0jS3wJrI+K9cxpsEyS9DeyNiPVTHcu5IiW+pBc4BgxiqWgAy1b9wNapTk5ngTn453QW437UXOA+vJes11kNLCpbEM7HktzuVvuSigT+NO4BTmmCknQZcEuJpWdIiS+Z9tSkpuux7LUTS4or2r2vGym/nLEB90oC9wVXVvuUepyl2PQwiqXl44y3359ERLwL/CVp3tkPry1rgDUNlvtpT0p8SZIkSUeSFVSSJEnSkWSCSpIkSTqSTFBJkiRJR5IJKkmSJOlIMkElSZIkHcl/dkoESkj1bIAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "percent_reduction = compute_factor(spending) * 100\n",
    "\n",
    "plot(spending, percent_reduction)\n",
    "\n",
    "decorate(xlabel='Hand-washing campaign spending (USD)',\n",
    "         ylabel='Percent reduction in infection rate',\n",
    "         title='Effect of hand washing on infection rate',\n",
    "         legend=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Exercise:** Modify the parameters `M`, `K`, and `B`, and see what effect they have on the shape of the curve.  Read about the [generalized logistic function on Wikipedia](https://en.wikipedia.org/wiki/Generalised_logistic_function).  Modify the other parameters and see what effect they have."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Hand washing"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can model the effect of a hand-washing campaign by modifying `beta`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_hand_washing(system, spending):\n",
    "    \"\"\"Modifies system to model the effect of hand washing.\n",
    "    \n",
    "    system: System object\n",
    "    spending: campaign spending in USD\n",
    "    \"\"\"\n",
    "    factor = compute_factor(spending)\n",
    "    system.beta *= (1 - factor)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's start with the same values of `beta` and `gamma` we've been using."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.3333333333333333, 0.25)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tc = 3      # time between contacts in days \n",
    "tr = 4      # recovery time in days\n",
    "\n",
    "beta = 1 / tc      # contact rate in per day\n",
    "gamma = 1 / tr     # recovery rate in per day\n",
    "\n",
    "beta, gamma"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can sweep different levels of campaign spending."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0 0.3328871432717143 0.4667702312363652\n",
      "100.0 0.3321342526691939 0.46414165040064037\n",
      "200.0 0.33017160845482885 0.4572170063132055\n",
      "300.0 0.32538647186519215 0.4398872029120663\n",
      "400.0 0.3154039052420003 0.40163064627138245\n",
      "500.0 0.3 0.3370342594898199\n",
      "600.0 0.28459609475799963 0.26731703056804546\n",
      "700.0 0.2746135281348078 0.22184699045990752\n",
      "800.0 0.26982839154517113 0.20079159841614402\n",
      "900.0 0.2678657473308061 0.1923921833925878\n",
      "1000.0 0.26711285672828566 0.18921320781833872\n",
      "1100.0 0.26683150821044227 0.18803175228016467\n",
      "1200.0 0.26672740341296003 0.1875955039953746\n"
     ]
    }
   ],
   "source": [
    "spending_array = linspace(0, 1200, 13)\n",
    "\n",
    "for spending in spending_array:\n",
    "    system = make_system(beta, gamma)\n",
    "    add_hand_washing(system, spending)\n",
    "    results = run_simulation(system, update_func)\n",
    "    print(spending, system.beta, calc_total_infected(results))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's a function that sweeps a range of spending and stores the results in a `SweepSeries`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sweep_hand_washing(spending_array):\n",
    "    \"\"\"Run simulations with a range of spending.\n",
    "    \n",
    "    spending_array: array of dollars from 0 to 1200\n",
    "    \n",
    "    returns: Sweep object\n",
    "    \"\"\"\n",
    "    sweep = SweepSeries()\n",
    "    \n",
    "    for spending in spending_array:\n",
    "        system = make_system(beta, gamma)\n",
    "        add_hand_washing(system, spending)\n",
    "        results = run_simulation(system, update_func)\n",
    "        sweep[spending] = calc_total_infected(results)\n",
    "        \n",
    "    return sweep"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's how we run it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0.000000</th>\n",
       "      <td>0.466770</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63.157895</th>\n",
       "      <td>0.465418</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>126.315789</th>\n",
       "      <td>0.462905</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>189.473684</th>\n",
       "      <td>0.458291</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>252.631579</th>\n",
       "      <td>0.449980</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>315.789474</th>\n",
       "      <td>0.435540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>378.947368</th>\n",
       "      <td>0.411960</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>442.105263</th>\n",
       "      <td>0.377183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>505.263158</th>\n",
       "      <td>0.333171</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>568.421053</th>\n",
       "      <td>0.287633</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>631.578947</th>\n",
       "      <td>0.249745</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>694.736842</th>\n",
       "      <td>0.223529</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>757.894737</th>\n",
       "      <td>0.207480</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>821.052632</th>\n",
       "      <td>0.198306</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>884.210526</th>\n",
       "      <td>0.193244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>947.368421</th>\n",
       "      <td>0.190500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1010.526316</th>\n",
       "      <td>0.189027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1073.684211</th>\n",
       "      <td>0.188239</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1136.842105</th>\n",
       "      <td>0.187819</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1200.000000</th>\n",
       "      <td>0.187596</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "0.000000       0.466770\n",
       "63.157895      0.465418\n",
       "126.315789     0.462905\n",
       "189.473684     0.458291\n",
       "252.631579     0.449980\n",
       "315.789474     0.435540\n",
       "378.947368     0.411960\n",
       "442.105263     0.377183\n",
       "505.263158     0.333171\n",
       "568.421053     0.287633\n",
       "631.578947     0.249745\n",
       "694.736842     0.223529\n",
       "757.894737     0.207480\n",
       "821.052632     0.198306\n",
       "884.210526     0.193244\n",
       "947.368421     0.190500\n",
       "1010.526316    0.189027\n",
       "1073.684211    0.188239\n",
       "1136.842105    0.187819\n",
       "1200.000000    0.187596\n",
       "dtype: float64"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "spending_array = linspace(0, 1200, 20)\n",
    "infected_sweep = sweep_hand_washing(spending_array)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And here's what it looks like."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure to file figs/chap12-fig03.pdf\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3iUVfbA8e+kJ0DoSAlV4FAUEBARUEEsyyIW7G1B1q77syy6drG79lV0UbDs2lDXgqgoglhQVERB6qFJCb2Fll5+f9w3MI5JeIEkM5Ocz/PMk5m3zbmTmTlz73vfewNFRUUYY4wxkSYm3AEYY4wxJbEEZYwxJiJZgjLGGBORLEEZY4yJSJagjDHGRCRLUMYYYyJSXLgDMPtPRFYALUtZ/YCq3iEiMcBLwDnAJlVtKSIPAtcCRUArVd12EDEcB2xX1dkHuP9ZwL+AusDZqvpxyPoiYIiqfnSgMe5nPIcBc4HWqrqiMp6zhBiGA4+paoNS1vcHpgG1VHVXJYZ2QESkC1BfVaeV9/Yi0gr4DThcVeeVsP5L4CdVHenjWH/4rPiJt4zjneE99+po+59FGqtBRa/bgCYl3B721h8NDAPOBPqKSDPgVuDvQNeDSU6eL4G0g9j/IeBToCPwxUHGUl18h/sf7w53ID5NADpX4PZlGQrc43Pb331WDuZJRaQl8B5Q21sUbf+ziGI1qOi1U1XXl7G+jvf3U1UtEpHiD/6UcNUQQtQBpqvqynAHEi1UNRco638eaQIVvH2pVHXrfmz+u8/KQT7178oQhf+ziGIJqgrymope9h4WishXwHHe4+Ui8h9VHS4iRwFPAD2A1cBYXBNToXecAcCDQFdgHfCwqo71mhgBJhYfq4QY2gGPAccChbhflTeq6k6v+Q7gJRG5W1VblVKUniJyF9AFWApco6pfBR3/ce/4ycAS4DZV/dBbvwJ4EjgD6OXtf7uqTvTWNwSeB07yyvZkGa/nB8B6Vb3Se3wT8AjQTFXXikg8sAU4Hfga98v9QqAZsBUY75W9QESaes97LK6p9XOvXBuDnm8kcCPuV/gnwKWquj20uch7HS8B/oaric4FrlfVGd5xWgAvAMcAa4FHgedVtcREICJNvHKdDCTharjXqeo6b32ZzxdyrC9xzdDPiMhZqtq/rOOXsv2RuBaBo3DfVb96z/ddaf+rkOf/SVVHisgo3HtoOTACyAHeAW4ALub3n5V7VHWUiAzC1fLF2+8xVX056PhnAXcC7b31t6nqBFyzI8BcEbkH19IQ/D87qNdYRC4Hbgaae8/1oKr+d1+vR7SyJr6q6S3cBw9c88KpQH/vcS/gOhFpBHyG+4AcDvwfcA3uzY+IdPDWfQN0A+4ARovIicCR3rEuBq4LfXIRqQdMB/JwX45DgX64dv7imLYC1wcdqyRXAaO8+JYDb4hIQEQCwERgJ9Dbi28u8LKIJATtfy8wBuiJS2DB698BGntxXQX8o4w4JgHHBz0egEsu/bzHR3t/vwFuwr0uw4B23uNrcMkL4N9AgVfu44BWuERbrL63/ETgz97z3lJGbPfjviiPBnJxCQkRicMlt0LcF/yNwH2lHcRLslOBFkHP2wz4wHu9y3y+EgwF0nFN0UN9HD90+5q413027gdSb9z/+/kyXouynIKrKR0N3MXe/0noZ+Uxr7XhXdx75zDc++hxETkPQESO9/Z7FffefAF4W0Q64T5f4D5vjwUHcLCvsYh0B57B/S/bA08Dr3g/1qokq0FFr8dF5OESlndS1VUikgFQ3AwoIlu89Zu8X+P3ADNVtfhLa4mI3Ip70z8M/BWYr6o3e+sXi0hd75ibRAQgQ1W3lxDDBbgfPxerapb3/MOB70Wkvaou9n4pblfVTWWU8Z+q+om3/yO4BNAQ2AWMA14qbsoRkceA84BDcLVBgDdVdby3/h5gDtBKRGJxSeAwVZ3vrf8H8GYpcUwCxohIGq65ph/wES75vo37Nfy5quaJyHxgeHFND1jh1bg64b70WgG/ACtUNVdEzgdqBT1XEXCJqm724nof9wVdmtFBr9GjwAQRSfTK1w4Y4L3G80TkblyCLMnJQFvgBFVd6x3vXNyv9BNwNb1Sn09Vc4IPpqpbRaQA1xS9VUROKev4qvp5yPaNcDWNJ1Q139v+Oe/1PhBZwNVek5uKyFVAD1V9t4TPys3A66o6xtt3mYgcCozE1YavAj5U1eIE9C8voaYAxe/nLV6NKTiGg3qNcTXMQmCl1zT+nIgsCXrOKscSVPR6CHithOVrfe7fGegvIsE9i2KAZBGpj/tC/Sl4B1V9bj+OPbs4OXlm4n4NdgIW+zzOsqD7Gd7fZFXdKCL/Bi4QkZ64X5PdvfWxQfsEP88O72+8F0NOcXLy/FhaEF7CX4D7xbsY15z3JntrXScDz3nbfigiA7yE2h7XtNQqKK47cb++h4rIVFzTZ3Bi3F6cnILKfWhpsZVSxjjveVeE/AD4Q1NckM64L7497x9VTfeaSjuz98uztOf7XYI6iOMXr9soIuOAa0SkK+61PIIDb/VZ6SWn4Njjy4j1cO/HQ7E4XIsAuPfP6yHxPgB7eheW5mBf40+Bb4HZ3g+hj4CXVTWDKsoSVPTarKpLD2L/ONwv+jtKWLcdl0wO9IRxVinLA+zfF0xBSccQkRrAD97zvA98iKtVfRmybS5/tKcpRUQCQSfFS9o2WHEzX1PgK+/2moi0xTUxTvKOOQrX7PkS7vX9B+5XN7AngTUHTgMG4ZqRLsadCyu1zGXEVVoZ89i/19rv/6zM17Qcjg/sOR82C1iIe23fABoRkhj2w/7EHYdrShtTyvoD/Wwc1GusqlleE3sfYAiu2fI6ETlFVaceQDwRz85BVV8LgQ6qurT4hjspexeuGWExe2slAIjIWBF5/I+HKvHYXUUkOWhZT9wv1kXlEHt/XPPVMar6oHcN1SHeOj9flr8CibjEUqx7KdsWmwQMxHVD/sr7Fbwcd35iTvFJbty5jb+r6t9V9VVgBa5pJuCdP3sU17niRVU9C9eJ40SvSas8zQNaeJ1BipV1vm8h0NJLDAB4HTpacuD/s+AvcT/HD95+KO6L+gRVfUxVp+Bd1hByvqYiLATahnw2+gNXe+tL+mx8JiLXU3biOqjX2Oskc7uqfquqt6jqYcDPuO7xVZLVoKJXLRFpXMLyXJ9dbJ8F/k9EnvbuN8edgJ6gqoVee/91InIf8B/cl9vFuJO74Gosh4nIdyU83+u4pqxXvRpFXVwT2BRVXbBfpSzZFiABONfrrdUdeMpbl7ivnVVVReQT4EURucLb55F97PYN7iT7SeztGPIl7lzdAyGxDRaRr4FUXCePukCi192/E66zyf/hTvqfj0tiwc165eEL3BfiyyJyC+5k/L1lbD8Fd45uvIjc6C17AvdlPOUAY9gFdPSSr5/jB2+/BfejY7CIzMMliOLa/j7/xwfpMeAHEbkNd86rK66X5/3e+qeAb0TkWtwPl8G4XpnXe2UA6CYiq/m9g32NM4G7RWQDMBnogPtROW6/SxglrAYVvR7EdY8Ovb3nZ2dVTcedO+mJ+9C8ijs3cr23fiWuGWEwMB/3RXupqhZfVPsYrrb1YgnHzgT+hPuCnunFNB33q/igqer3wO24zhwLvDhGAttwXeb9ON/b9wvcOaCn9/Gcud62G1V1ubf4K1yN7ZOgTYcDrXG9Cj/AJZ8Xg+L6K66jxRRcTa45MLi4a3958Zouh+K64P+Ea7IaRylNmd72p+NOuH+J6222FhgYcu5mf/wL96PmM5/H37M9LjGMBV7BvU5XAJfhaih+/8cHRFVnAWcB5+Le+0/g3muPeOtnAH/BjcoyH9d1/XRVXaiqW3D/73GEXCh8sK+xqv6Ie//cCCju9Xk8uPt7VROwGXWNqXq8WkgvDRoqSkTOxvWMbBO+yIzxz5r4jKmaioD/icjtuM4azXC14PFl7WRMJLEmPmOqIK97+Vm4JrOFuCazicDd4YzLmP1hTXzGGGMiUrVr4vOuyD4S16GgpGtOjDHGVJ5Y3DBTM0NHJKl2CQqXnL4JdxDGGGN+5xhcb989qmOCWgfw+uuv07hxSZcRGWOMqSzr16/nwgsvBO+7OVh1TFAFAI0bNyYt7WDm2zPGGFOO/nDKxXrxGWOMiUiWoIwxxkQkS1DGGGMikiUoY4wxEckSlDHGmIhkCWo/FRQUkpdv1/caY0xFq47dzA/Yrqw8rv7nVLbtzCEuNoaUpDh3S4wnOSmO5ETvcVI8Kd795KD1KUHrU2skUCslgZiYip57zRhjopMlqP0QHxdD3dQkduzOJb+gkB27c9mx+0CnyoG42AB1U5OoVyuJerWTqJeaRN3UROqnJlEvNZl6tZOoWyuR1BoJBAKWyIwx1YslqP2QGB/Lv27sT1FREXn5hWRm55OZk0dmdj5ZOflkZeeTmZ1HZk6+W5ed55blePeDlm/flcuurDw2bcti07asMp83LjaGeqmJXgJLcgmsdhKN69WgVdNUmjasSazVxIwxVYwlqAMQCARIiI8lIT6WOrUOfPbpnLwCtu3IZsv2bLbtzGbr9my27shmy45stu1w97duz2Z3dj4bt2WxsZRElhAfS6smtWjdtDatm6TSulltWjVJJSUp/oBjM8aYcLMEFUaJ8bE0rl+DxvVrlLlddm4+23bk7ElYW3e6pJa+cSe/rd3B5owsFq/KYPGqjN/t17h+iktaTWvTumkqrZvWplHdZGsuNMZEBUtQUSApIY4mDeJo0qDkRLYzM5cVa3ewfO12flu7nd/W7mDV+p2s35LJ+i2ZzJi7dwzGGklxtApKWB1a1qVF49TKKooxxvhmCaoKqJWSwOFtG3B42wZ7luUXFJK+cdeehPWbl7y278pl/vItzF++Zc+2zQ+pSd8uzejXtSktGteyGpYxJiJYgqqi4mJjaNUklVZNUhnQwy0rKipi286cPUlr+ZrtzF68kdUbdjH+c2X850pao5r07dqUfl2b0dKSlTEmjCxBVSOBQIB6qa47e48OhwCupvXr0s18O2ctM+auI33jLt76fDFvfb6YZg1r0q9rU/p1s2RljKl8lZqgRKQrMAboAiwHRqjqzDK2jwe+Byaq6qig5auA+kCRt2iNqkpFxV2VxcXG0F0a0V0acdWZXZi7dDPf/rqW735dx5pNu3hrymLemrI3WfXt2pRWTVItWRljKlylJSgRSQAmAE8BxwJnApNFpKWq7ihlt/uBbsDEoOM0AJoBqaq6u2Kjrl7iYmM4QhpxhDTiyqFlJasa9O3qzllZsjLGVJTKrEH1B+JV9Snv8XgRuRY4FxgburGI9AdOBD4LWdUDWGLJqWIFJ6urhnZh7rLNTPeaAdds2s3bUxbz9pTFNG1Qg/49mnPasW3suitjTLmqzATVCVgYsmwRcHjohiJSF5e0zsDVooJ1B2JE5EegNfAzcL2qhh7blJPY2Bi6tW9Et/Z/TFZrN+/mjc8WMem73xg2uBMDejS38QWNMeWiMkczrwlkhizLBFJK2HYM8JyqzithXQHwIzAUaAn8AkwSkZKOY8pZcbK69uxu/Pfuk7nn8qORFnXZtjOHp8b/wsinv2bRiq3hDtMYUwVUZg1qN5AcsiwF2BW8QESGAw1w56r+QFUfCdn+VuBqXNPfN+UUq/Eh1utg0a1dQ778OZ3/fDyfJaszuOmZb+jfI43hgztRv3bov9wYY/ypzBrUAiC0p10Hb3mw84FewDYRyQAGA7eIyEcAInK9iPQL2j4Wl2izKyRqs08xMQGO79mcMbecwDkntCc+LoYvZ6VzxcNTeetzJSfP5s8yxuy/yqxBTQMCInIDMBrXi68L8H7wRqp6cvBjEfkAmB3UzbwVcLGInAJkAP8EluDORZkwSk6M4+JBHTmxVwte/mg+3/26jtc+XcTkH1YyYshh9OnSxHr8GWN8q7QalKrmAoNwiWkrcDtwuqpuEpELRWRXmQfY6xbctVG/ABuBNsAQVbWf6RGicf0a3DqsFw9c1YdWTVLZuC2Lh/87k9v+/S2/rd0e7vCMMVEiUFRUtO+tqhARaQX8NnXqVNLS0sIdTpVXUFDI5B9W8uqkRezMzCUmACf1bsVFf+pA7ZoHPlWJMaZqSE9PZ+DAgQCtVXVF8LrKPAdlqqHY2BgG9WnNC7cO5NRj2hAIBPh0xgqueGgKE75eRn5BYbhDNMZEKEtQplLUTEngstMP55mRA+gujdidnc+4CfP422PTmLVoQ7jDM8ZEIEtQplI1P6QWoy7rzV1/PYqmDWqQvnEXo8Z+z70vfs+uzNxwh2eMiSCWoEylCwQCHNmpMaNvOp4RQzqTkhTHzAUbuO3f37Jtp10tYIxxLEGZsImPi+GM/m15ZuQAmjWswW9rd3Drs9PZuC10wBFjTHVkCcqEXaO6KTx0TT9aN01lzabd3PLsdNZu8nvVgTGmqrIEZSJC3VpJPHhVXzq0rMumbVn849nprFhX2iwsxpjqwBKUiRg1UxK494o+dG3XgIydOdz67HR0pQ08a0x1ZQnKRJTkxDju+mtvjurcmF1Zedz5/HfMXbo53GEZY8LAEpSJOAnxsdwy7EiOOyKNrJwC7h47gx8XrA93WMaYSmYJykSkuNgYbrygO386uhV5+YU8+PKPfPPLmnCHZYypRKWOZi4inwO+BupT1ZPKLSJjPDExAa4+sws1kuJ4d9pSHn39JzJz8jm5d8twh2aMqQRl1aDmAfO92ypgIBAAZgLfAllAf/44jbsx5SYQCDBscCcuHtSRoiIY/c5sPvhqabjDMsZUglJrUKp6Q/F9EfkfcIeqPhS8jYhcB5xSceEZ45LUOSe0Jzkxjhc+mMuLH84nMzuf808Sm1/KmCrM7zmoQcD/Slj+CdC3/MIxpnRDjmnDdeceQUwA3pysvPjhfKrbdDHGVCd+E9Ry4OwSlg/HmvhMJTqhVwtu/suRxMUGmPD1Mka/M4eCQktSxlRFfqd8/wfwgYgMxk2tHgB6AZ1wtStjKk3fLk1JGnEUD74yk8k/rCQrJ58bzu9OfJx1SjWmKvH1iVbVT4CuuKnW2wFtgS+BLqr6TYVFZ0wpenQ4hHsvP5rkxDi+mb2GB1/5kZy8gnCHZYwpR75/cqrqQlX9O66p78+qerOqLq+40IwpW+c29Xnwqr7USkngp4UbGDV2Btm5+eEOyxhTTnwnKBG5UUTWAduAViLysog8JSJ+mwmNKXdtm9fh4Wv6Ui81kXnLtjBuwrxwh2SMKSe+EpSI/B24DrgZyPEWTwDOBR6smNCM8adF41RGXXY08XExfPb9Sr77dW24QzLGlAO/NajLgCtV9VWgEEBVPwCGARdUUGzG+Na6aW2Gn9IJgGfens3mjKwwR2SMOVh+E1QLYFEJy1cA9cotGmMOwpB+bejRoRG7svJ48s2frfu5MVHOb4L6BTgn6HHxJ/9Kb50xYRcIBLj+vO7UqZXIr0s38960JeEOyRhzEPx2cBgJfCoixwKJwD0i0oH9vA5KRLoCY4AuuIt/R6jqzDK2j8d1bZ+oqqO8ZQHgPuByIAF4GbhJVa37lqFOrUSuP+8IRo39ntc/XUTXdg1p36JuuMMyxhwAv9dBzQDa42pLHwN1cddBdfR7HZSIJOA6VrwF1AEeACaLSGoZu90PdAtZdjkwFOiOuybrSOA2PzGY6qFHh0M47dhDKSgs4rHXZpGZnRfukIwxB8BvL77bgB2qeoeqnqGqQ1T1ZmC7iDzi87n6A/Gq+pSq5qnqeNxI6eeW8pz9gROBz0JWDQOeUtV0Vd0EjAKu8BmDqSaGDe5I66aprNuym+ffnxvucIwxB6Cs+aCaALW8h/cB00RkS8hmRwB/w3U/35dO/HHcvkXA4SU8d11gLHAGrhYVepwFIcdoKiL1VHWrjzhMNRAfF8tNF/Xk+ie/4oufVtNdGnFc97Rwh2WM2Q9l1aD64L78i5PKt97j4Nub3s2PmkBmyLJMIKWEbccAz6lqSVddhh6n+H5JxzHVWPNDanHZaYcB8Ny7c9iwNfTtZ4yJZKUmKFV9FzfmnuAGhz0ad86n+NYWaKyqI3w+124gOWRZCrAreIGIDAcaAE/5PE5xYtpVwrammju5d0uOPrwJmdn5PP76LAoKCsMdkjHGpzLPQanqclVdCsQDW4BaqrpMVZcBf2JvE6AfC3DJLlgHft9cB3A+bqT0bSKSAQwGbhGRj0o5Tgdgnapm7EcsppoIBAJce3Y36tdOYuGKrbw1ZXG4QzLG+OT3Oqg/AXNxyaLYUGCOiBzv8xjTgICI3CAi8SJyHq67+fvBG6nqyapaS1XrqGodXK/Bh1W1eObeV4GRItJSRBrgOkm86jMGUw2l1kjgxgu6EwjAW58r85eHnko1xkQivwnqQeA2VX2geIGqngDcCTzq5wCqmou7ZupMYCtwO3C6qm4SkQtFxG8T3RjgHeA7YAmuRnWXz31NNdWlbUPOOr4dhUXw+Buz2JVlXc+NiXR+L9Rth7uGKdQE3PVMvnidHvqVsPx14PVS9jk95HEhcLd3M8a3C07uwOzFm1iyOoNn35nNzRf3JBAIhDssY0wp/NaglgCnlLD8ZGB1+YVjTMWJi41h5EU9SE6MZfqctUydaW9dYyKZ3xrUg8DrItIXmIkbi687cBbgtxefMWHXtEFNrhzahSff/IXn3/+VTq3r0bRhzXCHZYwpgd+hjt4C/ozrzXcpbjSHROB4r3nOmKgxoEdzjj2iGdm5BTz6+izy8q3ruTGRyPdsuKo6GZhcgbEYUykCgQBXn9mVRSu3sXR1Bq9/upDhp3QOd1jGmBD7M+X7UBH5TkQ2i0hrEfmniFxfkcEZU1FqJMcz8oIexATgvS+XMmfxpnCHZIwJ4Xew2IuBccAk3MgNAdx0GfeJiJ9x+IyJOB1b1+O8kzpQVARPvPkz23flhDskY0wQvzWom4CrVPU+oABAVZ/HdZC4qoJiM6bCnTOwHZ1a12PrjmyeeXs2RUU2C68xkcJvgmoL/FjC8p+BxuUXjjGVKzY2hr9f0IMaSXH8MH89n85YEe6QjDEevwlqMVDSkEZnAVp+4RhT+RrVS+Gas928mOMmzGP1hp1hjsgYA/4T1B3A0yLyLK7n32Ui8jZurqZRFRSbMZXmmG7NOL5nc3LzCxn3YUmzvBhjKpvf66A+wk23URs3D1TxqBJ9VPWDCorNmEo1YkhnaiTF8fOijfy0cEO4wzGm2itrRt2lwLGqutab8v1JVb2o8kIzpnLVrpnIuScKL02cz0sT59GtfUPiYn1fiWGMKWdlffqa4OZaAjflu40HY6q8U/q1pkn9GqzesIvPZqwIdzjGVGtljSTxHjBFRPK9x2tEQucbdFQ1obwDMyYc4uNiuWRIJx58ZSavf7aI47qnUTPF3t7GhENZCeovwFigLm5SwcsAm7XWVHm9D2vC4Yc2YO6yzYz/fDGXnnZYuEMyploqNUGpahHwNYCIXAaMV1W71N5UeYFAgEtPO4zrn/ySj6YvZ1CfVjSzEc+NqXR+B4t9CThFRHrgRjT/3SxvqnpbeQdmTDi1aVabE45swec/ruLlifO5Y8RR4Q7JmGrHb4J6Avg/YB6wI2SdjQ1jqqSLBnVk+pw1/DB/PXOWbKJru4bhDsmYasVvgjoHuNobf8+YaqFeahJnHd+eVyctZNyEeTx1Y39iY2yKeGMqi9+LPJKALyoyEGMi0WnHHUrDusmsWLeDKT+uDHc4xlQrfhPUf4AbRCS2IoMxJtIkxsdyyWA3meFrkxaRmZ0X5oiMqT78NvGlAacB54jICiA3eKWq9infsIyJHP26NWXi9HosXLGVd6YuYdjgTuEOyZhqwW8NSoFHgH/jJi2cGnIzpsoq7nYO8MFXy1i/ZXeYIzKmevBVg1LVOys6EGMiWfsWdenfI40vZ6XzyscLuOUvR4Y7JGOqvLIGi30QuF9VM737pfJ7HZSIdAXGAF1wU8aPUNWZJWx3NPAk0AnXrf15L5Yib/0qoD57u7ivUdWSx2EyppwM+3Mnvvt1Hd/OWcv85Vvo3KZ+uEMypkorq4nvGCAh6H5pt35+nkhEEoAJwFtAHeABYLKIpIZslwhMxF0cXBs4FrgaOMNb3wBoBjRS1ZrezZKTqXAN6iRz5oC2AIybMJfCQrsE0JiKVNZQR8eUdP8g9AfiVfUp7/F4EbkWOBc35l/xc+WISGtV3SkiAVxNKRbY6m3SA1iiqnYiwFS6of3b8tn3K1mavp0vf17N8T1bhDskY6qsypzsphOwMGTZIuDw0A1VtXjO7TXAj8AUvHEBge5AjIj8KCKbROQzEelYQTEb8ztJiXEMG+zebv/5eCHZOfn72MMYc6AqM0HVBDJDlmUCKWXs0wZoj6s13eMtK8AlraFAS+AXYJKIlHUcY8pN/+7Nadu8Dlt3ZPPutKXhDseYKqsyE9RuIDlkWQqwq7QdVDVbVZcAj+Kuw0JVH1HVi1Q1XVUzgVuBergkZkyFi4kJcOmprtv5e18uZdO2rDBHZEzVVJkJagEQ2pmhg7d8DxFpJyJLRaRG0OJEvLmoROR6EQnumBGLO5eWXf4hG1Oyzm3q07drU3LzCvjvJwv2vYMxZr/5HUkCEamPO19U0nQbk30cYhoQEJEbgNHAmbju5u+HbLcMyAHuF5GbgXbASOAub30r4GIROQWXtP4JLAF+9lsWY8rD8MGd+HH+er78OZ0hx7ShfYu64Q7JmCrFVw1KRIYD6bgBYz8DPg26TfJzDFXNBQbhEtNW4HbgdFXdJCIXisgub7tC4FRc7WoTrmv6I6r6qneoW4DvceeeNuLOUw1R1QI/cRhTXhrXr8Fpxx4KwNgP5lJUZN3OjSlPfmtQtwCvALfxx/mgfFPVeZRw3ZSqvg68HvR4GS6ZlXSMbOAa72ZMWJ09sB1TflzFopXb+Gb2Go49Ii3cIRlTZfhNUM2BJ1V1W0UGY0y0SUmK56JBHRn9zmxe+XgBRx3WhMR4G/TfmPLgt5PEFOC4igzEmGh1Qq8WtG6ayqZtWXzwlXU7N6a8+K1BzQL+JSJDgMX8cboNX2PxGVMVxcYE+Ouph3HHmO/439QlnNirJfVSk8IdljFRz28N6kRckqoLHMUBjMVnTFXWtdX/Xr4AACAASURBVF1DjurcmOzcAl6bFDpgijHmQPidbqM8xuIzpkobMaQzsxZtYMrMVfy5b2vaptUJd0jGRLX9uQ6qIW5U8c64mtdCYJyqrqyg2IyJKk0b1mRw3zZM+HoZL0+cz/1X9iEQCOx7R2NMifxeB9UTd+7pPNzQRDtx1zPNFZEjKi48Y6LLuSe2p0ZyPL8u3cysRRvDHY4xUc3vOagngHeAzqo6QlUvwdWkXgceq6jgjIk2tVISOPeE9gC88tF8CmzOKGMOmN8E1RN43BvlAQBvdtuncJ0mjDGewX1b06huMivX7+SLmavCHY4xUctvgtoAlDQzWyvKGI3cmOooIT6Wi//cCYDXPl1Edq7NGWXMgfCboF4DXhCRISLS0LudCowhaIgiY4xzbLdmHJpWm607spnw9bJwh2NMVPKboO4HvsSNPL7eu/0PN5DrrRUSmTFRLCYmwIghnQF494ulZOzMCXNExkQfXwlKVXO8jhGNcBfn9gTqqer13ijlxpgQXdo2pGfHQ8jKyWf85xrucIyJOqVeByUiJwFfqGq+dz9YTaChiJt/0Od8UMZUO8MHd+LnRRv4dMYKhhzThmYNa4Y7JGOiRlkX6n4KNMbNufRpGdsV4Wa1NcaEaNkklYFHtuDzH1fxn48XcNvwXuEOyZioUVYTX7yqFl9pGF/GLaFCIzQmyl34pw4kxMcyY+46Fv62NdzhGBM1Sk1QITPUTgJqqmpB8A2oB3xX0UEaE83q107mjOPczLsvTZxnM+8a41NZ56COxU27DjAQuFREdoZs1hGQCorNmCpj6IC2fPr9Chat3MaMuevo06VpuEMyJuKVdQ5qO3AHEPBuNwKFQeuLcBfp3lxh0RlTRaQkxXP+SR0Y896v/OfjBfTq3Ji4WL9XeRhTPZWaoFR1Dt7oESLyDTBEVTMqKzBjqpqTe7dk4jfLWLNpN5/NWMHgfm3CHZIxEc3vdVDHAKeKyNDiZSLyhoicX2GRGVPFxMXGMGywGwLpzc+VzOy8MEdkTGTzO93GLcDTQGLQ4iXAsyLyt4oIzJiqqPdhTejYqh7bd+Xy7rSl4Q7HmIjmtxH8KuA8VX2zeIGq3g1cDNxQEYEZUxUFAnuHQPrgq2Vs2Z4V5oiMiVx+E1R9YEUJy5fgLuY1xvjUoVU9+nZpSm5eAa9/uijc4RgTsfxO+f4DMFJErii+PkpEYoDrgZ/8PpmIdMWNgN4FWA6MUNWZJWx3NPAk0AnYATwP3K+qRSISAO4DLsddJPwycJOq2pwGJmr85c8d+X7eOqbMXMWpxx5Kqyap4Q7JmIjjtwY1EhgKrBCRj0RkIvAbcBY+m/hEJAE3+vlbQB3gAWCyiKSGbJcITAReAmoDxwJXA2d4m1zuxdIdaAccCdzmsxzGRISmDWsyqE8riorczLvGmD/y24vvF9wFuY8B6bjk9CjQVlVn+Xyu/rjhk55S1TxVHQ/MB84Nea4coLWqvuAtqo8b6694jJhhwFOqmq6qm4BRwBU+YzAmYpx3opCSFMesRRuZs3hTuMMxJuL4beLDSwb/Cl0uIoeo6gYfh+gELAxZtgg4vITnKh6xYg3QBHgT+DroOAtCjtFUROqpqg10ZqJG7ZqJnHV8O/77yUJe+mg+T15/HDExgXCHZUzE8JWgRKQt8E9ccigeuTyA63beBDdo7L7UBDJDlmUCKWXs0wZoDnwE3APcWcJxiu+nsLeWZUxUGHJMGz7+9jeWr9nOV7+kM6BH83CHZEzE8HsOagzufM/LQEvc+aFpuB58V/o8xm4gOWRZCm64pBKparaqLsE1J55WynGKE1ypxzEmUiUlxHHRnzoC8OqkheTmFexjD2OqD78Jqjdwmao+AswGvlHVy3GdE87xeYwF/HFg2Q78vrkOEWknIktFpEbQ4kSgeJil0ON0ANbZMEwmWg3o2ZxWTVLZtC2Lj6YvD3c4xkQMvwkqBljn3VfgCO/+u0APn8eYBgRE5AYRiReR83Ddzd8P2W4ZkAPc723XCdeLcKy3/lVcl/eWItIA10niVZ8xGBNxYmMCXHKKu3j37SmL2bE7N8wRGRMZ/CaoX9nbxDYf1/Ub3PknX7PpqmouMAg4E3eu6HbgdFXdJCIXisgub7tC4FRczWgTrmv6I6panITGAO/g5qFagqtR3eWzHMZEpCOkId3aNWR3dj5vT1kc7nCMiQgBP5Onicgg4APchbkTcb3xfsB1mvhSVS+oyCDLk4i0An6bOnUqaWlp4Q7HmD2WpWdww1NfERsT4N//GEjj+jX2vZMxUS49PZ2BAweCu7xoRfA6v9dBTcLVaD5X1XSgH65W9SxwWblGa0w1dWhaHfp3TyO/oIhXPwm9IsOY6sdvN/OfgEtUdS7smSvqxooMzJjq6KJBHZk+Zy1fz17DaccdSvsWdcMdkjFh4/ccVHPAJq8xpoI1qpvCqce4iQyf/d8c8gsK97GHMVWX35EkxgATRGQMbpDX380RoKqTyzswY6qrc08UvpmzluVrtvPutCWce0Lo1RnGVA9+a1B34i7UfRzXLfzToNukignNmOopOTGO/zu7GwDjJy9m5fodYY7ImPAoNUGJyIigi2Xjy7glVHSQxlQ3Xds35OTeLckvKORf43+hwJr6TDVUVhPfaGAybmihLKCpqm6ulKiMMVxySmdmLdzAktUZTPh6GUMHtAt3SMZUqrIS1DrgORH5wdvuxuKLaUOp6oMVEZwx1VmN5HiuPacbo8Z+z2ufLqJX58akNaoV7rCMqTRlnYMagRs5/EygCBgCnF3C7awKjtGYaqtHh0MYeGRz8vILefqt2RQU7vvCemOqilJrUKr6FXA8gIisBvqr6pbKCswY41x66mH8ohtZuGIrH01fzmnHHhrukIypFH5HkmhuycmY8KiZksA1Z7leff/9ZCFrN9vMMqZ68NvN3BgTRr06N6Z/9zRy8wp4+q3ZFFpTn6kGLEEZEyUuO/1w6tRMZP7yLUz67rdwh2NMhbMEZUyUSK2RwJVndgHglY8XsH7L7jBHZEzFsgRlTBTp26Upfbs2JTu3gNHvzMbPdDnGRKtSe/GJyDpc9/J9UtWm5RaRMaZMV57RhblLNzNnyWYm/7CSk3u3CndIxlSIsi7UvaPSojDG+FanViJXnHE4j742ixc/nE93OYSGdZPDHZYx5a6s66Be9HMAEYkvv3CMMX4c060Z38xew/fz1jP6f7MZdWlvAoFAuMMyplz5nbCwIXALbor3WG9xAEgEDgPqVUh0xpgSBQIBrj6zK/OWbeHnRRuZOnM1J/RqEe6wjClXfjtJvACcA/wGDACWAIW4qd8fqJjQjDFlqZuaxGWnHw7AuA/nsWV71j72MCa6+E1QxwPDVPVqYD7wkqqeDDwC9Kmo4IwxZRvQI42eHQ9hd1Yez/3vV+vVZ6oUvwkqEVdrAlgI9PDuvwT0Le+gjDH+BAIBrjmrKylJcfy4YD1f/Zwe7pCMKTd+E9Ri9iaihcBR3v0U72aMCZMGdZL566mHAfDCB3PZtiM7zBEZUz78JqjHgFdE5ELgLeBCERkHvAZMr6jgjDH+nNirBUe0b8jOzDz+/Z419ZmqwVcvPlX9r4gsBzJVVUXkNOAKYAb7cb2UiHQFxgBdgOXACFWdWcJ2PYAnve12AOOA+1S1yFu/CqjP3guJ16iq+I3DmKomEAhw7TnduPbRL5gxdx3T56zlmG7Nwh2WMQfFVw1KRG4DZqnqzwCq+pmqDgX+7t38HCMBmICrgdXB9f6bLCKpIdulAB8Db+OS0EBgOHCZt74B0AxopKo1vZslJ1PtNaqbwiWndAbg+fd/ZfuunDBHZMzBKWuooyZA8fzS9wHTRCR0TqhuwN+Am308V38gXlWf8h6PF5FrgXOBsUHbNQdmqOpo7/ESEfkA16X9BVwHjSWqaiNlGhPi5N6tmD5nLb8u3cwL78/lpot7hjskYw5YWU18fYB32NuMNh13cW6oV3w+VydcB4tgi4DDgxeoqgJnFD/2al6DcMkJoDsQIyI/Aq2Bn4HrVTX02MZUOzExAf52TjeufWwaX89ew9FdmtCvqzX1mehUahOfqr4LtAUEl5j6AO2Cbm2Bxqo6wudz1QQyQ5ZlUkYvQBFJBN70thvjLS4AfgSGAi2BX4BJXtOgMdVe4/o1GD64EwBPvPEzc5ZsCnNExhyYMs9BqepyVV2Ka5r7AViNuyYqGdigqhv347l2e/sFSwFKnL9aRBoDXwCNgBNUNcuL6RFVvUhV01U1E7gVN9RSj5KOY0x1NLhvawYd3Yq8/ELuf+kHFq3YGu6QjNlvfruZF4nIA8B2YC7wK7BZREaLSGzZu+6xAFcbC9bBW/47ItIJmAksxSWnbUHrrheRfkGbx+KaKu3iD2M8gUCAK4d2YUCPNLJzCxg1dgbL0jPCHZYx+8VXN3PgfuAS4K/sPRfVFzfU0WZglI9jTAMCInIDMBo4E9eN/P3gjUSkLjAZGK+qI0s4TivgYhE5BcgA/okb5eJnn2UxplqIiQlw3blHkJNXwHe/ruOuF2bw0NV9adE4dd87GxMB/NaghgGXqeobqrpKVVeq6hu4a6F8nYNS1VxcZ4czga3A7cDpqrpJRC4UkeKmvotx3civEpFdQbc3vfW3AN/jzj1tBNoAQ1S1wGdZjKk2YmNjGHlhT3p0aMSO3bnc+fx3rNtsHWBNdAj4ueJcRHYAPVV1cchyAWaratTMliYirYDfpk6dSlpaWrjDMaZS5OQVcM/Y75m7bDON6ibz8DXH2CSHJiKkp6czcOBAgNaquiJ4nd8a1E/AlSUsvwpXkzHGRLDE+FjuGNELaVmXjduyuGPMtzZmn4l4fs9B3Qp8ISL9ccMbARyN627+pwqIyxhTzlKS4hl12dHc/ty3LF+7nTuf/44Hr+5Hao2EcIdmTIl81aC8LuY9gK9wSSkN15Ghg6p+W3HhGWPKU83keO694miaH1KTlet3cvfYGWRm54U7LGNKVNZQR3cBj3nXGqGqi4AbKiswY0zFqF0zkfuu6MMtz05n6eoM7hn3PfdcdjRJiX4bVIypHGXVoO7Gjf5gjKli6tdO5v4r+9KgdhILftvKA6/8SF6+dYQ1kaWsBFXSuHvGmCrikHop3H9VX+rUSmT24k38878/kV9QGO6wjNljX3X6NBFJ2tdBVHVVOcVjjKlEzRrW5L4r+nDrs9P5Yf56nnzjZ268sAexMfb71ITfvhLUHyYTDBHAjXbud7gjY0yEadUklXsuP5o7xnzH17PXkJgQy7VndyPGkpQJs30lqAFA6BxQxpgqpn2Lutx9aW/uemEGn/+4iqTEOC477TACAUtSJnzKSlBFwKL9HLHcGBOlOrepz+2X9OK+F39g4jfLSUqI5S9/7hTusEw1Zp0kjDF7dJdG/OMvPYmJCfDO1CW8PWXxvncypoKUlaD+A2RVViDGmMjQ+7Am3Hh+dwIBeHXSQl6btJC8fOvdZypfqU18qnpJZQZijIkcx3VPIyevgGfens1bUxbzw/z1/O2cbrRvUTfcoZlqxO9gscaYauako1rywFV9aFK/BivW7WDk018zdsJcsnLywx2aqSYsQRljStWlbUOeuWkAZw5oSyAQ4MOvl3Pto1/w8yLrO2UqniUoY0yZEuNjGX5KZx6/7ljaNKvNxm1Z3D12Bk+8MYsdu3PDHZ6pwixBGWN8aZtWhyeuO5bhgzuREBfDtFnpXP3IVL76OR0/E58as78sQRljfIuNjeHM49vxzE0D6NK2Adt35fLY67O498Uf2LgtM9zhmSrGEpQxZr81bVCT+6/sw9/O6UaNpDh+WriBax/9go+mL6ew0GpTpnxYgjLGHJBAIMBJR7XkuX8MpE+XJmTlFPD8+3P5x+hvWLV+R7jDM1WAJShjzEGpl5rErcN6cdvwI6mXmsiildu47okvefOzRTbHlDkolqCMMeXi6MOb8uzNAzm5d0vyC4p4Y7Jy3RNfsWjF1nCHZqKUJShjTLmpmRzPtWd348Gr+9K0QQ1Wb9jJzaO/4dHXfuJn3UiBnZ8y+2Ff020YY8x+O/zQBjw9cgBvfa68O20pX/+yhq9/WUO91ET6d2/O8T2b07JJarjDNBHOEpQxpkIkxrvpOk7u3Ypps1bzxU+rWbd5N+99uZT3vlxKm2a1Ob5nc449ohl1a+1z4m5TDVVqghKRrsAYoAuwHBihqn+YtVdEegBPetvtAMYB96lqkYgEgPuAy4EE4GXgJlW1AcKMiUCH1EvhvBOFc09oz6IV25g2azVfz17D8jXbWb5mOy9NnE93acTxPZtzVOfGJMTbBN3GqbQEJSIJwATgKeBY4Exgsoi0VNUdQdulAB8D9+Nm9G0DfAasB17AJaahQHcgB3gfuA24t7LKYozZf4FAgI6t69GxdT0uPe0wZi7cwLSfVvPTwg17bjWS4ujXrRkDejSnU+t6NqNvNVeZNaj+QLyqPuU9Hi8i1wLnAmODtmsOzFDV0d7jJSLyAdAPl6CGAU+pajqAiIzCzV1lCcqYKJEQH0vfLk3p26Up23fl8PUva/hi1mqWrs7gs+9X8tn3KzmkXgrH92zOgB7NadKgRrhDNmFQmQmqE7AwZNki4PDgBaqqwBnFj72a1yBccio+zoKQYzQVkXqqav1ZjYkytWsmMuSYNgw5pg2r1u9g2qx0ps1azYatmbw5WXlzstKxVT2O6tyYdi3qcGizOtRIjg932KYSVGaCqgmEDtaVCaSUtoOIJAJveNuNKeU4xfdTAEtQxkSxFo1TGTa4ExcN6si8pZv5YtZqvvt1LQtXbGVh0PVUTRvUoG3zOrRrXoe2aXVo06w2KUmWtKqaykxQu4HkkGUpwK6SNhaRxsC7QCFwgqoWTz8fepziBFficYwx0Sc2JkDX9g3p2r4hVw7twg/z17Pwty0sTc9g+ZodrN28m7Wbd/P1L2sACAQgrVFN2qa5hNW2eR3aNK1NUqJ1VI5mlfnfWwDcELKsA/Df0A1FpBOuY8QXwOWqmhNyHAG+DTrGOlXNKPeIjTFhl5wYR//uafTvngZAXn4hq9bvYGl6BktWZ7AsPYMV63awesMuVm/YxbRZ6QDEBKD5IbVcTctLWs0PqWU1rShSmQlqGhAQkRuA0bhefF1wvfD2EJG6wGRgvKqOLOE4rwIjRWQqrjY1yltmjKkG4uNiODStDoem1eHk3m5ZXn4BK9btYOlql7SWpmewcv3OPbepM1fv2T8lKY4GdZJpUDuZ+rWTaFAnmfq1k2lQJ8ktq5NMjaQ460EYASotQalqrogMwp1LuhdYAZyuqptE5ELgeVWtCVwMNAOuEpErgw4xUVXP9/Y/BPgO17z3DnBXZZXDGBN54uNiade8Lu2a12WQtywnr4AVa7e7pJWewdLVGazbkklmdj6r1u9k1fqdpR4vKSGW+rWTaVgnmfpBiatB7STq1EqkRlI8KUnx1EiOIz7OrtuqKIHqNhOmiLQCfps6dSppaWnhDscYU4mKiorYlZXH5owstmzPZnNGFpu3Z7nHGdl77mfn+h+FPT4uxktYcaQkx1MjKY6UpHhqJntJLGR5jaR4kpPiiI+LISE+lvi4GBK9vwnxscTGBKpV7S09PZ2BAwcCtFbVFcHr7AyiMabaCAQC1EpJoFZKAq2b1i5xm6KiIjKz89m8fW/S2pKRxaYMl7x2ZOaSmZXP7uw8dmflkZdfSMauHDJ25ZR4vP0VE4D4+FgS4mKIj4slIX7v34S42N8lttiYALExMcTGBtz92OJlZd3//T6BQICYAMR49wOBALGBAIEY9q4LBAjEBIgJuFtgzzKoUzORFo0rZlxFS1DGGBMkEAhQIzmeGsnxtNzHF29RURE5eQVkZuezOyuPzOw8dmfnu79ZwcvygrbJJyvHJbbc/ELy8grc3/wCcvMKKSgsIie3gJzcAiCvcgp9kB66ui+HHdqg3I9rCcoYYw5QIBAgKSGOpIQ46qWWz4C3BQUuceXmFXhJrIC8PPc3N89LZPmF5OUVUlhYRH5hIQUFRRQUFlFYWEh+0P2CwiLvsbdt8X1vm/yCQvechUUUFRVRVASFhUUUFt8vKqKwMOh+URFFIY9rpSSQ1qhWuZQ9lCUoY4yJILGxMSTHxpBs13DZhIXGGGMikyUoY4wxEckSlDHGmIhkCcoYY0xEsgRljDEmIlmCMsYYE5GqYz/GWID169eHOw5jjKn2gr6L/zCoYXVMUE0ALrzwwnDHYYwxZq8mwLLgBdUxQc0EjgHWAf5HhDTGGFMRYnHJaWboimo3mrkxxpjoYJ0kjDHGRCRLUMYYYyKSJShjjDERyRKUMcaYiGQJyhhjTESyBGWMMSYiWYIyxhgTkSxBGWOMiUjVcSSJAyYiXYExQBdgOTBCVf9w9XOkEZETgYeBdsBG4FFVfV5EEoDRwFm4UTWeUNWHgvY7B3gQd5X3V8BwVd1Y2fHvi4jUAX4F7lLVV6pCuUSkCfBvYACQDbygqndGe9lEpDfwNCDAJuBhVR0XreUSkV7AR6rayHt8wOUQkRbAi0Bv3Of0b6r6SSUWZ48SytUI+BcwEAgAk4DrVHWbt75CymU1KJ+8N94E4C2gDvAAMFlEUsMa2D6ISHPgXeB+XNznAw+JyMnAPbgvikOBI4FhIvIXb79OuDfVcKA+sAQYX9nx+zQGaBb0uCqUawJuOK5DcB/sYSJyAVFcNhGJwZXraVWtjXsvjvZ++EVVuUQkICKXApOBhKBVB1OO8bgfWvWBy4DxItKmYkvye2WUaxyQD7TG/dCtCzzr7VNh5bIE5V9/IF5Vn1LVPFUdD8wHzg1vWPvUCnhDVd9X1UKvxvcl0BcYBjygqttUdQXwGHCFt99FwERVna6q2cCtQF8RaVfZBSiLiAwDUoG5QYujulwichTQBvg/Vc1W1d9w779pRHfZ6gKNgICIBIAi3JdeLtFXrnuAq3A//IIdUDlEpD3QE9cKkKuqXwAfAn+thLIE+0O5vB8WhcA9qrpbVTOAsUA/b5MKK5clKP86AQtDli0CDg9DLL6p6jeqemXxYxGphxss9xdcdXxB0ObB5ekUvE5VM4HVRFB5RaQ1cDcwImhZHaK8XEAPXMIdJSJrRGQZcAaQRRSXTVW34Jq//gPk4QYHvQ1XU4y2co1R1R7AT8ULDvK91wlYpaq7S9m3svyhXN4P29NVdWnQdqfjvkOgAstl56D8qwlkhizLBFLCEMsBEZHauF8vPwCzvMXBZQouT0SXV0RigdeAkaq6XkSKV9X0/kZluTzFPyK+wtWkOgCf4s7ZQJSWzfslng1cgGt27gO8B2R4m0RNuVR1bQmLD/a9F/YyllKu3xGRkbgE1cdbVGHlsgTl324gOWRZCrArDLHsN6+qPQH3S+dC9pYluEzB5Yn08t4JqKq+F7K8+JdatJYLIAfYoaqjvMdzRGQcrvkIordsQ4G+qnqT9/grEXmR6C9XsYN57wXKWBcRRCQeeAYYAhyvqou8VRVWLmvi828B7uRnsA78vjofkUTkWFyt6QPgLO+8xjZgPb8vU3B5fldeEUkBWhA55T0POEtEMkQkA9dk8Byu80o0lwtcE0iK1zGnWBwQ7f+z5kBiyLJ8XM0wmssFwEF+phYALUQkuZR9w0pEagGf4zp+9FLV2UGrK6xcVoPybxru5O4NuHb0M3Hdzd8Pa1T7ICKHAh8Bt6vqMyGrXwXuFpFfcdX0kbiupABvANNFpD8wA3gI+EVVF1dK4Pugqh2CH4vIbOApr5v5LqK0XJ7PcV/aj4vI33Ef/r/iTl4vJ3rLNhnXg/Ry3En27rheXZcCq4jecgU74M+UiMwBHhCRW3HNZ6cBR1du+KUaj6vQHOOdYwpWYeWyGpRPqpoLDMIlpq3A7cDpqrqpzB3D7xqgFu6LYVfQ7Z/AXcA8XG/EmbjzAmMAVHUurvPBGGAz0Bk4OwzxH4ioLpfXE+o43PmndbjzT4+o6rtEcdlUdT6ume8K3HmnN4BbVHUCUVyuEAdTjjOBjrhrhcYBf1XVeZUWeSlEpAvwZ6AXsDHoOyQdKrZcNqOuMcaYiGQ1KGOMMRHJEpQxxpiIZAnKGGNMRLIEZYwxJiJZgjLGGBORLEEZY4yJSHahbpQRkRXAY6o6OmR5K+A34PCKunZCRDbjxr57pSKO7zOG/riLpmup6h+GS6mM1yFaiMgo4BRV7RnuWCqaiJyCG1E74D0uAoao6kcV+JwTcBeHT9ufz6WIHIcb5PhIXCVhLvCkqr4VtF/w9T9FuPHr5gIPqeqHQduNBmaq6n/KvYARwGpQpqpZjRtRetG+NqwGHgNODncQYdIENyJHhRCRM4AkVZ22n/t1w114PRmXoI4A3gZeF5HQqXsuxpUjDTjK2+89EQm+CPZe4F4R+f/2zj3Yq6qK4x9EfCDlIx3sYdqoLBVEFBQxUcAnYmUak0AYImiEjIqiOYgvUEwCn6QmAiGKjgKGAdEoAiYQgzBgKItAIQUrBQFfEIL98V3Hezj39/tduKLceznfmd/ce/Z57LX3OWe99jprfatSA6niyC2oHDUK7r4Z5UPb5REWZpVJNvp1wt2/6mfgNlQqZHvRGZjp7nel2oaY2bEoldXTqfa1qXGsAhaZ2T7AfWY2wd03uvt/zexFoBdwayXoqdLIBVQNRTzIg1Ba/IMQ037E3QfE/pHIbbA3Kk+9GhiW2l8blXDuijIS31pBf/cCR7n7ubHdHmmGp7j7rGhbjFL2DI+chj1QQcWPgIlAD3f/KBJTPgycC+wFvIzKRP8z1eUvzOwG4GDgb0BXd38761IJ18s9qJ7SScBSlJfw+aBp/+irLbAOZUkfBhwRBeey4zwAGAL8OJomAle6+zozqx/7zgb2RdbcQHcfFudOQ1p9c+As4B2Ui+6o6LcuMMrdr4rjR6LM5vWC/lVAP3cfE/t3R4yyE6oovAblTOvt7puzLj4zaxP0Gar3MxU43d1bH5dHTAAACjpJREFUhev0WaA30sr3B2YA3dz9PwXmYfeY1/Yx1lej3zmpe9ARJe89CJgCXBE1oTCzg1Hp97aU3f9r3X1d7P8cuBQx3qORe+vq1LN0RNy3U4AlKG1Smr4vXHwx79OB4+LevA0MSt2XPYF7UQLiz2KOLouxTysw9lboua2MhbYFONrMDnH3t1Pt11M+63chDAX6oIKjU6NtHPCYmd3h7psqQVOVRe7iq7kYghIyXoAY0v1AfzNrmjqmG2KSzRBTTu/vh8ogdAbaoBxqpdwIk4FTIyU/QGvkO28JYGbfBxoAk82sAxJ4vVH56C4ogWRSeXQAykPXCiUU3QIMz/T3SyRYW6Iy1HeXoO12xMyaoXLUI1KZwsdEX61RZdC+QO0S1xqPMqe3Q/PSkCh9DYxCFWPPQIXaJgAPBTNO0BeVPTkWCcvxMfazgWuAXiFIEnQB1sc8PAiMDgYJYlSdYy6OjO2e6J5vhSjuOBGYBDRBwihrAewH/ArlTrsACdKbisxDL6RA/CjmYAnwrKlSboKBSAlphe7RM6l94xD/aRHXOJzyZdwHoOewBaq6+4cYS50Yx8font4O/KYInQluQALleOAFtr4v96H5vyDGdCF6JoqhHTDN3TdW0GchDAP2AZaZ2WQzu87MGrv7e+7+r4pOdvcVaNwNU80voHezacGTqjFyC6p6YrCZ3ZVpq5XZfgVZTPNie5CZ3YwYZ1KscJm794v/B4RV09TM5iFG1d/d/wJgZpcAy0vQND1oaI4smtYoi3pLJDzOQRmO3zWzVUCX1AL2CjObHrSBtNMPgbfCouoWbWn0TMYWlkbHErSNcfen4tjbgAXAYaYih+cAx7n7wtjfCwnbcjCzhsBpQBN3XxBtlyOmBhIAf3b3N2PfAOBqJDwSV81L7v5Y7B8R5/aKaqWLwuppSJl2vCLGugVYHMKpBzANJSTt4u7T49jlZtYn5nFshvzuwBvungglN7MWyAJNUBtZQa8GfaOBkwvNBbofnwDL3f09M+uNmH9a6e3n7lPiWpcB883s6OizMdA6YfJm1glYaWaNUsEtD7r7pNg/CPhTWDttUDmHk919DfC6qd7ZwCK0ggTK0LjWjcCvgcaR+f5SoH0yj2bWmfLVs9NoBswusb8o3N1DCbwBWeHnondzDtApU7W2GNYC30xdc4OZvfll6KqqyAVU9cRAVE02je8ippVgNHB+vGwNkNZcj62tg7TLDCQU6gAHAvWBRLjh7u+EYEmsoXQ9l5fdvW24UtqY2VLEwHoA40OrPgcxcNx9upk1CwZ+FGLIhiyQZHwTgfdCcD2HyhiksSz1/1pKu0fSZRnWx986yHW0EbmPEswqcZ1jkCa/MGlw97mUlcd+CGgfzLoBYtiw9ZynGVBStuDNVNsGtq6ZNDOEU4I5yKWHu08ws9Zmdnf01xjNeyELsDHKrp3GLOQ6TCM7V3UojAeR5bfKzGYia3FkuBaTY15OHb8AzXUj9GzVBVanjk1gKBt4IVpAPKsRsCKEU4I5RehM8MW13H199FsHPX97kJobd19sqjFWDPVR1u40NlHYI7Vban9y/aVA91BujkeC6ipggpk1dPeKMnh/E7mj01iNrPcahdzFVz3xvrsvTf+Qpp3GcFTA71PE+FtQVlo7wf8KXLtWkf/Tx69CAi/5dYv2yUi7bYUKJL6CXv4m0Z5ow10Q8zogzrkYMTgA3H02YrSXobpIdwKzzGyvFC2bS9CdRbFxbqrgvELXKcg8QghPQeUW3kfC6ocFDi23RpARQFl8ltnejRh7WFvjkEAai9ZzFhS5TjEGmkV2rgrOT6wHGlqDcuBaZCGlLbIs7bWC9t3R89ok8zsSRbcVoyVNT7FnsxhKPQOwfbxwS4H+P0BrcVnsH3/XgixBM2sO4O6fu/s8V+XkDkhhOrRUx6b6bt+g/H2uTfl3otojt6BqICLIoDNwlrtPjbaD0Qu0LQz5fVSHqDkwM84/EFVExd0/Y2tLIMFkYDCyCKa7+6bQrvuglyfRcnuiReqb49q1EHOaG9s3om87ngSeDPeNIytgR2IREqDHUmYVnVji+CXIujkmzk2+aRkNnI/cmoenXHwnxXnbIwSzOCGzfRJlzKknCiwYHv3tiRhcof7+gdZO0ig11pIws+6oLP3TwHNmVg9p8adRdp9PQGucIEthj6D9Y+A7wIdJAEZY5Q+gdckPK+h+IXLR1k8FcGTnaVuxFFmtTYGVQcsRaD2uGP6NAj/SmI8CNrI4BXg3RefZyEPx98xx65FA/6ACerujOZ2ZaT+QGhi9mguomokNiAlcaGZvIWYwCDGubMntcnD3z83sHqBv+LaXAr+lgufF3ZeZ2QrkgmobzdOA/sATKUthNdDazI4Jmq5BTD9xtX0P6BxrT+9SFiiwBGnaOwTuvtTMngceNbOeiIEmVYfLWUru/oaZTQGGmdmVccxg4EUk1DcDF5vZE8jldn+cWuGcl8Dx4QodhYRgW8oss9VAOzObgdw+tyKNvVB/DwPXmdkdwB+RRftztF5YGeyHgmrWIFdxO6TFp0uBD479G4FH0PrcsngmFwFPmdl1iDE/gCzq5dvQ94tojWhUnH8IcGNlBuHuH5vZo0HrOuQ6Sz62LeZqexVFBKYxFJgb7tYRyMpqiaIsb0sddwsw1sw+QV6OtUhBuhOtGaddd/uFYlkLzU0nJMA7xOcUAJjZvkgxybpwqz1yF18NRISadgTORGtFo5DrZBLbHunzOxR6+wjS1uZTfs2qEJIAg2QtJwmemJQ65ir08s9FEUh7onWnRAu+HrkHxyNG1AY4z91LrQtUFl2R5jwDhcUnX+QXcxl1Ru6pl9CczkNh5iuBy+O3GAmn3yNt/8tEV/0VWZcLgtafuntioXRB0XGvoXW65cBjhfoL+n6CItVeQy6lx0uMsyIMQc/VCGTdXgFc5FuXYR+BoiRfCPo7Bi1b0LrLGjSP05GwPS/NeIshLPjzkHtuNgp3H1zJcYACFmYAz6NIv/Ho+Sw2NxOBFqlIUCLI5gz0DCfvSy+gj7vflzruORQY0SD6eh24C83V1Zl+HkcK2koUNNMMzVE2AOZUZD3N355BVwfkFXVz7LIws7rI5TI5FU12IrIq9glGuDPpGwnUc/ef7YBrNQLqpoQbZjYU2Nvdu37Z62f6OoxqlG7KzC4EpiYKkJkdhMqTH1oo9Dtc0guBW9x93NdKbAGY2RjgdXfvv7Np2dHIXXw5dmVsAB5FrqKhyG01GBi7s4XTV4AfoHQ6HdB61InAJehbsl0dfYGL4hOEOsglN7vYd0nhAr8drQHuVAFlZt8GTg9aahxyF1+OXRYpV9PJyO01BbkUryh1XnVEZM64E62VOFoXvDL5TmkXRycU9DAXuZa3UD78fiu4+zPAp2Z25ldPXkncBNyUCbmvMchdfDly5MiRo0oit6By5MiRI0eVRC6gcuTIkSNHlUQuoHLkyJEjR5VELqBy5MiRI0eVRC6gcuTIkSNHlcT/AawbOlhz2z+OAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(infected_sweep)\n",
    "\n",
    "decorate(xlabel='Hand-washing campaign spending (USD)',\n",
    "         ylabel='Total fraction infected',\n",
    "         title='Effect of hand washing on total infections',\n",
    "         legend=False)\n",
    "\n",
    "savefig('figs/chap12-fig03.pdf')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's put it all together to make some public health spending decisions."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Optimization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Suppose we have \\$1200 to spend on any combination of vaccines and a hand-washing campaign."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "12"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num_students = 90\n",
    "budget = 1200\n",
    "price_per_dose = 100\n",
    "max_doses = int(budget / price_per_dose)\n",
    "dose_array = linrange(max_doses, endpoint=True)\n",
    "max_doses"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can sweep through a range of doses from, 0 to `max_doses`, model the effects of immunization and the hand-washing campaign, and run simulations.\n",
    "\n",
    "For each scenario, we compute the fraction of students who get sick."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 0.9888888888888889 0.26672740341296003 0.1875955039953746\n",
      "1 0.9777777777777779 0.26683150821044227 0.17458071882622528\n",
      "2 0.9666666666666667 0.26711285672828566 0.16290983834857686\n",
      "3 0.9555555555555556 0.2678657473308061 0.15350834947768177\n",
      "4 0.9444444444444445 0.26982839154517113 0.1485650923152827\n",
      "5 0.9333333333333333 0.2746135281348078 0.15294595061102179\n",
      "6 0.9222222222222223 0.28459609475799963 0.1749644150235239\n",
      "7 0.9111111111111112 0.3 0.21734316168444845\n",
      "8 0.9 0.3154039052420003 0.2590710444883414\n",
      "9 0.888888888888889 0.32538647186519215 0.27840288410342784\n",
      "10 0.8777777777777778 0.33017160845482885 0.2779145346228302\n",
      "11 0.8666666666666667 0.3321342526691939 0.2673574966927026\n",
      "12 0.8555555555555556 0.3328871432717143 0.25279694563572175\n"
     ]
    }
   ],
   "source": [
    "for doses in dose_array:\n",
    "    fraction = doses / num_students\n",
    "    spending = budget - doses * price_per_dose\n",
    "    \n",
    "    system = make_system(beta, gamma)\n",
    "    add_immunization(system, fraction)\n",
    "    add_hand_washing(system, spending)\n",
    "    \n",
    "    results = run_simulation(system, update_func)\n",
    "    print(doses, system.init.S, system.beta, calc_total_infected(results))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following function wraps that loop and stores the results in a `Sweep` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sweep_doses(dose_array):\n",
    "    \"\"\"Runs simulations with different doses and campaign spending.\n",
    "    \n",
    "    dose_array: range of values for number of vaccinations\n",
    "    \n",
    "    return: Sweep object with total number of infections \n",
    "    \"\"\"\n",
    "    sweep = SweepSeries()\n",
    "    \n",
    "    for doses in dose_array:\n",
    "        fraction = doses / num_students\n",
    "        spending = budget - doses * price_per_dose\n",
    "        \n",
    "        system = make_system(beta, gamma)\n",
    "        add_immunization(system, fraction)\n",
    "        add_hand_washing(system, spending)\n",
    "        \n",
    "        results = run_simulation(system, update_func)\n",
    "        sweep[doses] = calc_total_infected(results)\n",
    "\n",
    "    return sweep"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can compute the number of infected students for each possible allocation of the budget."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.187596</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.174581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.162910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.153508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.148565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.152946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.174964</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.217343</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.259071</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0.278403</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.277915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.267357</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0.252797</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "0     0.187596\n",
       "1     0.174581\n",
       "2     0.162910\n",
       "3     0.153508\n",
       "4     0.148565\n",
       "5     0.152946\n",
       "6     0.174964\n",
       "7     0.217343\n",
       "8     0.259071\n",
       "9     0.278403\n",
       "10    0.277915\n",
       "11    0.267357\n",
       "12    0.252797\n",
       "dtype: float64"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "infected_sweep = sweep_doses(dose_array)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And plot the results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure to file figs/chap12-fig04.pdf\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot(infected_sweep)\n",
    "\n",
    "decorate(xlabel='Doses of vaccine',\n",
    "         ylabel='Total fraction infected',\n",
    "         title='Total infections vs. doses',\n",
    "         legend=False)\n",
    "\n",
    "savefig('figs/chap12-fig04.pdf')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercises\n",
    "\n",
    "**Exercise:** Suppose the price of the vaccine drops to $50 per dose.  How does that affect the optimal allocation of the spending?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Exercise:** Suppose we have the option to quarantine infected students.  For example, a student who feels ill might be moved to an infirmary, or a private dorm room, until they are no longer infectious.\n",
    "\n",
    "How might you incorporate the effect of quarantine in the SIR model?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Solution\n",
    "\n",
    "\"\"\"There is no unique best answer to this question,\n",
    "but one simple option is to model quarantine as an\n",
    "effective reduction in gamma, on the assumption that\n",
    "quarantine reduces the number of infectious contacts\n",
    "per infected student.\n",
    "\n",
    "Another option would be to add a fourth compartment\n",
    "to the model to track the fraction of the population\n",
    "in quarantine at each point in time.  This approach\n",
    "would be more complex, and it is not obvious that it\n",
    "is substantially better.\n",
    "\n",
    "The following function could be used, like \n",
    "add_immunization and add_hand_washing, to adjust the\n",
    "parameters in order to model various interventions.\n",
    "\n",
    "In this example, `high` is the highest duration of\n",
    "the infection period, with no quarantine.  `low` is\n",
    "the lowest duration, on the assumption that it takes\n",
    "some time to identify infectious students.\n",
    "\n",
    "`fraction` is the fraction of infected students who \n",
    "are quarantined as soon as they are identified.\n",
    "\"\"\"\n",
    "\n",
    "def add_quarantine(system, fraction):\n",
    "    \"\"\"Model the effect of quarantine by adjusting gamma.\n",
    "    \n",
    "    system: System object\n",
    "    fraction: fraction of students quarantined\n",
    "    \"\"\"\n",
    "    # `low` represents the number of days a student \n",
    "    # is infectious if quarantined.\n",
    "    # `high` is the number of days they are infectious\n",
    "    # if not quarantined\n",
    "    low = 1\n",
    "    high = 4\n",
    "    tr = high - fraction * (high-low)\n",
    "    system.gamma = 1 / tr"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
